Linux 如何使用cut以不同格式输出初始行?
我有这样一个文件:Linux 如何使用cut以不同格式输出初始行?,linux,bash,awk,sed,cut,Linux,Bash,Awk,Sed,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(99%的Linux环境中都存在这种情况): 通过sed $ sed 's/^[^[:s
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环境中都存在这种情况):
通过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 '{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
$awk'{printf”%s:%s:%s:,$2,$4,$6;对于(i=7;i较短版本的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[\:]+
将字段分隔符设置为空格或:
如果没有更多关于xxx
,yyy
,…的说明,请共享您的命令。列之间的模式是什么?选项卡?还有,这其中的算法是什么?对于第一个3,在:
之后打印,对于最后一列,打印整个值?@soundhax如果您对某个问题有意见,请使用“添加意见”链接,不要进行破坏性编辑。看起来每条记录的字段数不一样,例如,这会错过最后一条记录的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)
$ 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
sed 's/ *[A-Z]: */:/g;s/...//;s/\(:[a-z]\) */\1:/;s/ */-/g' YourFile