如何用AWK实现从源文件首行取值并追加到目标文件指定行后
用基础AWK实现从文件取值并追加到指定行末尾
完整实现命令
awk 'NR==FNR {val=$0; next} /firstvalue =/ {print $0, val; next} 1' sourcefile.txt targetfile.txt > temp.txt && mv temp.txt targetfile.txt
命令拆解说明
提取sourcefile第一行的值:
NR==FNR:处理第一个文件(sourcefile.txt)时,总记录数NR等于当前文件记录数FNR,触发该逻辑块val=$0:将第一个文件的第一行内容存入变量valnext:跳过后续处理,直接切换到第二个文件
处理targetfile指定行:
/firstvalue =/:匹配包含指定模式的行print $0, val:打印原行内容,再追加提取到的val值(自动用空格分隔)next:跳过后续处理,避免重复打印该行1:AWK简化写法,等价于print $0,用于保留所有不匹配模式的行,保证原文件其他内容不变
安全修改原文件:
- 先将结果输出到临时文件
temp.txt,再用mv替换原targetfile.txt,避免直接重定向清空原文件导致数据丢失
- 先将结果输出到临时文件
示例验证
原文件内容
sourcefile.txt:
1234567890
targetfile.txt:
firstvalue =
执行命令后结果
targetfile.txt变为:
firstvalue = 1234567890
常见问题说明
- 用
grep无法实现是因为它只能提取匹配行,无法定位并修改原文件指定行,直接用>重定向会覆盖整个文件 - 之前AWK尝试失败大概率是没处理多文件逻辑,或是直接写文件时未保留原文件的其他内容
内容的提问来源于stack exchange,提问作者gesora
相关产品推荐
相关产品推荐

