【问题标题】:unfolding a file on linux在linux上展开文件
【发布时间】:2009-02-19 07:47:55
【问题描述】:

我有一个巨大的文本文件,在 liux 上大约有 400.000 行 80 个字符宽。

需要“展开”文件,将四行合二为一 最终有 1/4 的行,每行 80*4 字符长。

有什么建议吗?

【问题讨论】:

    标签: linux file folding


    【解决方案1】:
    perl -pe 'chomp if (++$i % 4);'
    

    【讨论】:

    • 这很短。不过,它似乎在输出中缺少最后一个换行符。
    • 那一定是因为你文件的行数不是四的倍数。
    【解决方案2】:

    使用 awk 更简单的方法是:

    awk '{ printf $0 } (NR % 4 == 0) { print }' filename
    

    虽然如果你想防止在没有尾随换行符的情况下结束,它会变得有点复杂:

    awk '{ printf $0 } (NR % 4 == 0) { print } END { if (NR % 4 != 0) print }' filename
    

    【讨论】:

    • 可爱,虽然我怀疑与 kmkaplan 建议的 perl 解决方案共享“有时缺少尾随换行符”的问题。尽管如此,为了清晰和简洁的道具。
    • 我添加了一个更复杂的示例来解决该问题。还是比较简单的。
    【解决方案3】:

    我希望我正确理解了您的问题。你有这样的输入行(除了你的行更长):

    abcdef
    ghijkl
    mnopqr
    stuvwx
    yz0123
    456789
    ABCDEF
    

    你想要这样的输出:

    abcdefghijklmnopqrstuvwx
    yz0123456789ABCDEF
    

    下面的 awk 程序应该这样做:

    { line = line $0 }
    (NR % 4) == 0 { print line; line = "" }
    END { if (line != "") print line }
    

    像这样运行它:

    awk -f merge.awk data.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2014-05-27
      • 1970-01-01
      • 2017-02-19
      • 2021-11-14
      相关资源
      最近更新 更多