【问题标题】:Remove newline while while splitting file using awk使用 awk 拆分文件时删除换行符
【发布时间】:2014-09-19 07:25:05
【问题描述】:

我有一个包含 190 条记录的文件,并希望将其拆分为 190 个单独的文件。 我面临的问题是,在将其拆分为 190 个单独的文件后,每个文件的末尾都会添加一个换行符。

每一行都有“注意”这个词。

我正在使用 awk 命令

    awk '{if ($0 ~ /NOTE/) a++} {printf >> "file"a}' OrgFile.txt

下面是包含 190 条记录的 Orgfile.txt 的示例

    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 创建这些新的单个文件,但其中没有换行符。

如果有人知道如何更好地做到这一点,那就太好了

谢谢

【问题讨论】:

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

标签: unix awk


【解决方案1】:

我使用print 而不是printf 来解决它。假设每一行都转到一个新文件,我还对您的脚本进行了一些更改:

awk '$0 ~ /NOTE/ {print $0 > "file"(++a);}' OrgFile.txt

更改:模式超出正文(不使用 if 语句)。您可以使用前增量在同一个打印语句中完成后增量。

如果我误解了,请告诉我,但在您的情况下,如果一行不包含“NOTE”一词,它会附加到您编写的最后一个文件中,因为您的打印代码位于另一个始终执行的块中(甚至如果此行不包含单词“NOTE”)。在我的代码中,只有包含单词“NOTE”的行才会写入文件,但如果我对您的语义有误,您可以更改代码;-)

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2016-08-01
    相关资源
    最近更新 更多