這並不工作,因爲當你每次閱讀一行時你都在換行。你需要-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