这并不工作,因为当你每次阅读一行时你都在换行。你需要-0777
才能使它工作。
你也只打印前10个元素,所以你需要引入一个循环。
perl -0777nE'@F = split /\n/; say join "\t", splice @F,0,10 while @F' Data.txt
乞求利用-a
!
perl -F'\n' -0777naE'say join "\t", splice @F,0,10 while @F' Data.txt
或者,我们可以采取一个完全不同的方法。短而甜:
perl -pe's/\n/\t/ if $. % 10' Data.txt
如果没有10列的倍数,那么将以尾部标签而不是换行符结束。好吧,不太好。那么怎么样
perl -0777pe's/\n(?!\z)/ ++$i % 10 ? "\t" : "\n" /eg' Data.txt
更新你从此改变你的问题,要求固定宽度的字段。
如果你事先知道宽度(说字段之间10 + 2个字符= 12):
perl -F'\n' -0777naE'say pack "(A12)9 A*", splice @F,0,10 while @F' Data.txt
如果不这样做:
perl -MList::Util=max -F'\n' -0777naE'
$w = 2 + max map length, @F;
say pack "(A$w)9 A*", splice @F,0,10 while @F;
' Data.txt
在输出中如何分隔列;与标签? – 2013-04-24 23:32:56
是的,他们被标签分开 – user1976336 2013-04-24 23:37:28
你说“每10个元素之后”,但你的例子只有9. 9或10? – ikegami 2013-04-24 23:47:40