Unix 使用awk拆分文件时删除换行符

Unix 使用awk拆分文件时删除换行符,unix,awk,Unix,Awk,我有一个有190条记录的文件,我想把它分成190个单独的文件。 我面临的问题是,在我将其拆分为190个单独的文件后,在每个文件的末尾添加了一个换行符 每行都有NOTE这个词 我正在使用awk命令 awk '{if ($0 ~ /NOTE/) a++} {printf >> "file"a}' OrgFile.txt 下面是我的Orgfile.txt和190条记录的示例 2014-09-04-22.13.12.000000000000000912345678 NOT

我有一个有190条记录的文件,我想把它分成190个单独的文件。 我面临的问题是,在我将其拆分为190个单独的文件后,在每个文件的末尾添加了一个换行符

每行都有NOTE这个词

我正在使用awk命令

    awk '{if ($0 ~ /NOTE/) a++} {printf >> "file"a}' OrgFile.txt
下面是我的Orgfile.txt和190条记录的示例

    2014-09-04-22.13.12.000000000000000912345678  NOTE  123456   123456
    2014-08-04-23.22.12.000000000000000912345678  NOTE  123456   123456
    2014-07-04-07.07.12.000000000000000912345678  NOTE  123456   123456
    .....
如何仍然使用此命令从Orgfile创建这些新的单个文件,但其中没有换行符

如果有人知道如何做得更好,那也太好了

谢谢

我用print而不是printf来解决这个问题。我还在脚本中做了一些更改,假设每一行都指向一个新文件:

awk '$0 ~ /NOTE/ {print $0 > "file"(++a);}' OrgFile.txt
更改:模式不在正文中,不使用if语句。可以使用预增量在同一打印语句中完成后增量


如果我误解了,请告诉我,但在您的情况下,如果一行不包含单词NOTE,它将附加到您编写的最后一个文件中,因为您的打印代码位于另一个块中,即使这一行不包含单词NOTE,也会始终执行该块。在我的代码中,只有当文件中包含单词NOTE时,才会将一行写入文件,但如果我对您的语义理解错误,您可以更改代码-

该命令不会向文件中添加换行符。在十六进制编辑器中打开它查看。确实如此,这就是我问这个问题的原因。你是在十六进制编辑器中打开的吗?@hek2mgl我的观点是,发布的脚本不会执行,因为它包含语法错误,因为你不能在没有参数的情况下调用printf。因此,OP调用print with no args将添加换行符,或者调用printf with args,这取决于他使用的格式arg是否添加换行符。我们只需要OP告诉我们他真正在执行什么命令,然后我们才能开始帮助他调试任何命令。@EdMorton好的,明白了