这不起作用,因为当您一次读取一行时,您会在换行符上进行拆分。你需要-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