如何用awk将另一脚本的单列输出追加为现有表格最后一列
如何将awk脚本输出作为最后一列追加到现有表格?
我有一个名为my_script的awk脚本,输出是单列内容:
DD EE AA CC BB
同时有一份名为file.txt的现有表格:
C1 123 C3 222 C5 175 C4 318 C8 299
希望把my_script的输出作为最后一列追加到表格,得到如下结果:
C1 123 DD C3 222 EE C5 175 AA C4 318 CC C8 299 BB
尝试了以下脚本但未成功:
awk '{print $0, $3=myscript}' file.txt
解决方案
方法一:用paste命令(最简单)
paste命令专门用于按行拼接多个文件内容,直接执行:
paste file.txt <(./my_script)
<(./my_script)是进程替换,会把my_script的输出当作临时文件传给paste,自动按行对应拼接两部分内容。
方法二:用awk实现
如果想用awk完成,可以先把my_script的输出读入数组,再遍历原文件对应拼接:
awk 'NR==FNR{arr[NR]=$0; next} {print $0, arr[FNR]}' <(./my_script) file.txt
NR==FNR:处理第一个输入(my_script的输出)时,将每一行存入数组arr,下标为行号NR;next:跳过后续逻辑,直接处理下一行;- 处理
file.txt时,打印当前行$0,再加上数组中对应行号FNR的内容。
原命令失败的原因
你写的$3=myscript是错误的:在awk中,myscript只是普通字符串,不会被当作外部命令执行。原命令会把myscript当作第三列的值输出,而非脚本执行结果,因此无法得到预期效果。
内容的提问来源于stack exchange,提问作者Dr. Heinz Doofenshmirtz PhD
相关产品推荐
相关产品推荐

