我有一個這樣的文件:如何使用cut以不同的格式輸出初始行?
A: 1.2.3.4 Z: xxx R: a Q W
A: 5.6.7.8 Z: yyy R: b X Y
A: 9.10.11.12 Z: zzz R: c L N X
像cut
或sed
運行命令後,所需的輸出(某物存在於Linux環境的99%):
1.2.3.4:xxx:a:Q-W
5.6.7.8:yyy:b:X-Y
9.10.11.12:zzz:c:L-N-X
我有一個這樣的文件:如何使用cut以不同的格式輸出初始行?
A: 1.2.3.4 Z: xxx R: a Q W
A: 5.6.7.8 Z: yyy R: b X Y
A: 9.10.11.12 Z: zzz R: c L N X
像cut
或sed
運行命令後,所需的輸出(某物存在於Linux環境的99%):
1.2.3.4:xxx:a:Q-W
5.6.7.8:yyy:b:X-Y
9.10.11.12:zzz:c:L-N-X
單程awk
:
$ awk '{printf "%s:%s:%s:",$2,$4,$6;for(i=7;i<NF;i++)printf "%s-",$i;print $NF}' file
1.2.3.4:xxx:a:Q-W
5.6.7.8:yyy:b:X-Y
9.10.11.12:zzz:c:L-N-X
說明:
的腳本將文件中的每一行中運行:
printf "%s:%s:%s:",$2,$4,$6; # print the 2nd, 4th, 6th field separated by a :
for(i=7;i<NF;i++) # from the 7th field to the penultimate field
printf "%s-",$i; # print the field value followed by a -
print $NF # print the last field (followed by a newline)
通過sed的,
$ sed 's/^[^[:space:]]\+[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+[^:]*:[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+[^:]*:[[:space:]]\+\([^[:space:]]\+\)[[:space:]]\+/\1:\2:\3:/;s/[[:space:]]\+/-/g' file
1.2.3.4:xxx:a:Q-W
5.6.7.8:yyy:b:X-Y
9.10.11.12:zzz:c:L-N-X
AWK的一個較短的版本會是什麼樣
$ awk -F[\ :]+ '{print $2":"$4":"$6":"$7"-"$8}' input
1.2.3.4:xxx:a:Q-W
5.6.7.8:yyy:b:X-Y
9.10.11.12:zzz:c:L-N
-F[\ :]+
集S中的字段分隔符爲空或:
它看起來像每個記錄的字段數是不一樣的,這會錯過例如最後一條記錄的「X」。 – 2014-11-24 12:42:13
sed 's/ *[A-Z]: */:/g;s/...//;s/\(:[a-z]\) */\1:/;s/ */-/g' YourFile
沒有更多的規格上xxx
,yyy
...
分享您的命令吧。 – SMA 2014-11-24 12:09:47
列之間的模式是什麼?標籤?另外,這個算法是什麼?對於第一個,在':'之後打印,最後一列是整個值? – fedorqui 2014-11-24 12:12:28
@soundhax如果您對某個問題有評論,請使用「添加評論」鏈接,請勿破壞性地進行編輯。 – 2015-03-31 12:01:03