awk没有为多个文件打印换行符

时间:2017-05-10 15:36:48

标签: awk scripting newline

我有一个(希望)快速简单的问题,这让我有点疯狂!我有一堆文件,我想从它们打印1美元。每个文件都有几行输出,比方说两个。因此,如果我从一个文件中打印$ 1,我可能会得到这样的结果:

1 0

但是,我要做的是从所有文件中打印出来:

awk '{printf $1}' files*

当我这样做时,输出基本上只是一个长行:1110000111100000 ......等。不是我想要的。我希望输出像这样:

1 0 
0 1
1 1

这样每行代表每个文件的输出。

我试过了:

awk 'BEGIN { ORS=" " }; { print $1}'

和相当多的迭代,到目前为止没有成功。我知道这应该很简单,但答案已经提到了我,我将不胜感激。为了记录,这不是任何课程,只是我自己的工作。此外,我确实在这里和其他地方看过其他帖子,到目前为止还没有任何工作。先感谢您。

2 个答案:

答案 0 :(得分:0)

awk '{printf "%s%s", (FNR>1 ? OFS : ors), $0; ors=ORS} END{print ""}' file*

解释:对于每一行,它打印一些东西(由三元表达式控制),然后是行的内容。这是除了第一个文件之外的每个文件的第一行的换行符(通过在读取第一行之后不设置ors来控制),以及每隔一行的空白char。完成所有文件后,它会打印一个终止换行符。

答案 1 :(得分:0)

在GNU awk(gawk)中尝试以下内容:

awk '{printf "%s ", $1} ENDFILE {print ""}' files*

第一个printf会打印以空格分隔的$ 1。

第二个打印件在每个文件后打印换行符。