一種在Bash中轉(zhuǎn)換文件的有效方法我有一個(gè)巨大的選項(xiàng)卡分隔文件,格式如下X column1 column2 column3
row1 0 1 2row2 3 4 5row3 6 7 8row4 9 10 11我想轉(zhuǎn)座子它以一種高效的方式使用bash命令(我可以編寫十行左右的Perl腳本來完成這個(gè)任務(wù),但是它的執(zhí)行速度應(yīng)該比本機(jī)bash函數(shù)慢)。所以輸出應(yīng)該看起來像X row1 row2 row3 row4
column1 0 3 6 9column2 1 4 7 10column3 2 5 8 11我想出了這樣的解決方案cols=`head -n 1 input | wc -w`for (( i=1; i <= $cols; i++))do cut -f $i input | tr $'\n' $'\t' | sed -e "s/\t$/\n/g" >> outputdone但這是緩慢的,似乎不是最有效的解決辦法。我看到了vi的解決方案這個(gè)職位但還是太慢了。有什么想法/建議/絕妙的想法嗎?
3 回答

有只小跳蛙
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
rs
:
rs -c' ' -C' ' -T
-c
-C
-T
-t
-T
rs
ruby -e'puts readlines.map(&:split).transpose.map{|x|x*" "}'
jq
:
jq -R .|jq -sr 'map(./" ")|transpose|map(join(" "))[]'
jq -R .
-s
(--slurp
-r
(--raw-output
/

揚(yáng)帆大魚
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
python -c "import sys; print('\n'.join(' '.join(c) for c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip()))))" < input > output
import sysfor c in zip(*(l.split() for l in sys.stdin.readlines() if l.strip())): print(' '.join(c))
添加回答
舉報(bào)
0/150
提交
取消