awk新手求助:如何将横向输出列追加到文件及优化实现
解决方案
一、解决屏幕输出问题,实现正确追加
你之前的命令是两个独立指令(awk 和 printf),只给 awk 加 >>outfile 时,后面的 printf 输出仍会流向屏幕。要让所有输出都追加到文件,需要把整个命令组的输出统一重定向:
方法1:用子shell包裹命令
(awk -F'\t' '{printf "%14s", $2}' infile ; printf '\n') >> outfile
方法2:用大括号包裹命令(注意末尾分号)
{ awk -F'\t' '{printf "%14s", $2}' infile ; printf '\n'; } >> outfile
这两种方式都会把 awk 生成的列内容和最后的换行全部写入 outfile,屏幕不会显示任何输出。
二、更简洁的优化实现
可以让 awk 单独完成所有操作,包括最后的换行,无需额外的 printf 命令,代码更紧凑:
awk -F'\t' '{printf "%14s", $2} END{print ""}' infile >> outfile
- 核心逻辑:遍历
infile每行时,按格式打印第二列;所有行处理完成后,END块里的print ""会输出一个换行,刚好形成完整的一行记录。 - 运行两次该命令后,
outfile就会生成你期望的两行内容。
内容的提问来源于stack exchange,提问作者MAZ
相关产品推荐
相关产品推荐

