我正在尝试仅使用一个 awk 命令来执行以下操作。我有一个具有以下结构的文本文件
第一个字段用“:”分隔,最后一个字段(主机列表)用空格分隔
Uniq id:名称:唯一标识符:host_list(可以为空到多个并且可以重复)
sv_0:blabla:205700DD4C506261796ED3:Host_10 Host_1 Host_16
sv_111:abcd:205700DD4C50629585735C:Host_10
sv_3:xpto1:2057008E714F629B3BCDCF:Host_11 Host_10
sv_46:something:205700DD4C50629E5AB93A:
Run Code Online (Sandbox Code Playgroud)
sv_0 blabla 205700DD4C506261796ED3 Host_10
sv_0 blabla 205700DD4C506261796ED3 Host_1
sv_0 blabla 205700DD4C506261796ED3 Host_16
sv_111 abcd 205700DD4C50629585735C Host_10
sv_3 xpto1 2057008E714F629B3BCDCF Host_11
sv_3 xpto1 2057008E714F629B3BCDCF Host_10
sv_46 something 205700DD4C50629E5AB93A
Run Code Online (Sandbox Code Playgroud)
使用下一个命令可以,但我不喜欢一个接一个地使用管道
awk -F: '{print $1" "$2" "$3" "$4 }' file.txt | awk '{nfield=4; while (NF >= nfield) {print $1" "$2" "$3" "$nfield; nfield++}}'
使用单个gawk命令:
awk -F'[: ]' '{ for (i=4;i<=NF;i++) print $1,$2,$3,$i }' file.txt
Run Code Online (Sandbox Code Playgroud)
sv_0 blabla 205700DD4C506261796ED3 Host_10
sv_0 blabla 205700DD4C506261796ED3 Host_1
sv_0 blabla 205700DD4C506261796ED3 Host_16
sv_111 abcd 205700DD4C50629585735C Host_10
sv_3 xpto1 2057008E714F629B3BCDCF Host_11
sv_3 xpto1 2057008E714F629B3BCDCF Host_10
sv_46 something 205700DD4C50629E5AB93A
Run Code Online (Sandbox Code Playgroud)