awk 一行

awk 一行

我正在尝试使用 awk 脚本将多行编译为一行;我怎样才能做到这一点?

我正在使用命令:

awk < $pot/towhee.prod 'NR==411{print$5,$6}''NR==412{print$5,$6}''NR==430{print$7,$8}' 

它产生这个:

0.24975E-01 0.00000E+00
0.36574E+04 0.59343E+02
-3340.691 0.399

但我想要这个:

0.24975E-01 0.00000E+00 0.36574E+04 0.59343E+02 -3340.691 0.399

我该怎么做?

答案1

您可以设置输出记录分隔符到一个空格(或制表符)。如果您希望打印输出时带有终止换行符,则可以在最终打印之前将其更改回来

awk 'BEGIN{ORS=" "} NR==411{print$5,$6}''NR==412{print$5,$6}''NR==430{ORS="\n"; print$7,$8}'

答案2

printf允许您更好地控制打印格式,包括不换行,除非您用\n.

awk < $pot/towhee.prod 'NR==411{printf("%s %s ",$5,$6)}''NR==412{printf("%s %s ",$5,$6)}''NR==430{printf("%s %s ",$7,$8)}' 

%s 表示变量的字符串格式。其他控制字母可用允许您更好地控制每个变量的格式。

答案3

尝试这个,

awk < $pot/towhee.prod 'NR==411{print$5,$6}''NR==412{print$5,$6}''NR==430{print$7,$8}' | tr '\n' ' '

相关内容