0

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

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

有什么建议么?

4

3 回答 3

10
perl -pe 'chomp if (++$i % 4);'
于 2009-02-19T07:57:06.267 回答
2

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

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
于 2009-02-19T07:57:34.657 回答
2

使用 awk 更简单的方法是:

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

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

awk '{ printf $0 } (NR % 4 == 0) { print } END { if (NR % 4 != 0) print }' filename
于 2009-02-19T14:30:26.070 回答