我有一个这样的文件:
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
之后的所需输出(99%的Linux环境中存在的内容):
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
答案 0 :(得分:3)
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)
答案 1 :(得分:0)
通过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
答案 2 :(得分:0)
较短版本的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[\ :]+
将字段分隔符设置为空格或:
答案 3 :(得分:0)
sed 's/ *[A-Z]: */:/g;s/...//;s/\(:[a-z]\) */\1:/;s/ */-/g' YourFile
没有关于xxx
,yyy
,...