【发布时间】:2009-02-19 07:47:55
【问题描述】:
我有一个巨大的文本文件,在 liux 上大约有 400.000 行 80 个字符宽。
需要“展开”文件,将四行合二为一 最终有 1/4 的行,每行 80*4 字符长。
有什么建议吗?
【问题讨论】:
我有一个巨大的文本文件,在 liux 上大约有 400.000 行 80 个字符宽。
需要“展开”文件,将四行合二为一 最终有 1/4 的行,每行 80*4 字符长。
有什么建议吗?
【问题讨论】:
perl -pe 'chomp if (++$i % 4);'
【讨论】:
使用 awk 更简单的方法是:
awk '{ printf $0 } (NR % 4 == 0) { print }' filename
虽然如果你想防止在没有尾随换行符的情况下结束,它会变得有点复杂:
awk '{ printf $0 } (NR % 4 == 0) { print } END { if (NR % 4 != 0) print }' filename
【讨论】:
我希望我正确理解了您的问题。你有这样的输入行(除了你的行更长):
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
【讨论】: