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