與我以前的question相關。來自同一個流的列的連接
從具有列的流。
貓文件
a d 1 4 b e 2 5 c f 3 6
如何列/字段串連成列,例如喜歡這個。
a 1 b 2 c 3 d 4 e 5 f 6
我曾嘗試使用我的優選命令cut
如以下所示,但是隻有從第一cut
命令的輸出。
cat file | (cut -f1,3; cut -f2,4;)
或
cat file | { cut -f1,3; cut -f2,4; }
a 1 b 2 c 3
與我以前的question相關。來自同一個流的列的連接
從具有列的流。
貓文件
a d 1 4 b e 2 5 c f 3 6
如何列/字段串連成列,例如喜歡這個。
a 1 b 2 c 3 d 4 e 5 f 6
我曾嘗試使用我的優選命令cut
如以下所示,但是隻有從第一cut
命令的輸出。
cat file | (cut -f1,3; cut -f2,4;)
或
cat file | { cut -f1,3; cut -f2,4; }
a 1 b 2 c 3
使用awk的,你可以做
awk '{for(i=1;i<=NF-2;i++)a[$i]=$(i+2)}END{for(i in a)print i,a[i]}' test
a 1
b 2
c 3
d 4
e 5
f 6
所以鍵保存到一個關聯數組和明年後分配領域它。
注意這不會保留順序,但它只是巧合。
而且你原來的
cat file | (cut -f1,3; cut -f2,4;)
不起作用,因爲第一次切割消耗流,而不會繼續第二。
你可以做類似
<file tee >(cut -f2,4) >(cut -f1,3) >/dev/null
這將流發送到兩個命令。
cat file |
=無用的貓;可以使用< file
代替
cut -f1,3 <file
cut -f2,4 <file
但是從性能的角度來看,它啓動2個進程,打開文件兩次,並讀取兩次,這可以用內建命令來完成
str=
while read k1 k2 v1 v2; do
echo "$k1"$'\t'"$v1"
str=$str$k2$'\t'$v2$'\n'
done < file
echo -n "$str"
編輯:因業績不佳對於大文件,最好使用像awk,sed或更完整的perl這樣的文本處理工具,這裏是一行代碼:
perl -a -pe '$_="$F[0]\t$F[2]\n";$s.="$F[1]\t$F[3]\n";END{print$s}' <file
'awk'{print $ 1,$ 3}'file ; awk'{print $ 2,$ 4}'文件' – Cyrus