awk 转置带有添加文本的特定列,并且不在第 n 列上拆分,因为之后给定文本
awk transpose specific colums with added text and done split on nth column since given text after
我有这个输入文件
输入:文件1
LIB SITE LINUX A FEDORA 1a 22 X64 DC58 ROOM DC LOC 2.b
LIB SITE LINUX A FEDORA 1b 22 X64 DC58 ROOM DC LOC 2.b
LIB SITE OPENV A OPENV 1a 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE OPENV A OPENV 1b 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE OPENV A OPENV 1c 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1a 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1b 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1c 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1d 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE SUSE B SUSE 2a 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE SUSE B SUSE 2b 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE SUSE B SUSE 3c 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE SUSE B SUSE 4a 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE LINUX A CENTOS 8b 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE LINUX A CENTOS 9a 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE LINUX A CENTOS 3c 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE LINUX A CENTOS 8a 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7de 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7e 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7r 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7t 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 74 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 71 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 73 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 744 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 77 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 75 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 724 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 75 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 71 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 72 22 X64 DC41 ROOM DF LOC 5.p
我有这个:
awk -v OFS=" " 'NR > 1 {d[]= OFS ; c[] = c[] OFS } END {for (p in d) print d[p] OFS parent c[p]}' file1
将输出到这个:
LIB A WIN9K 1a 1b 1c 1d
LIB A OPENV 1a 1b 1c 7 7de 7e 7r 7t 74 71 73 744 77 75 724 75 71 72
LIB B SUSE 2a 2b 3c 4a
LIB A LINUX 1b 8b 9a 3c 8a
我尝试将多个管道命令放入以下格式,其中也是在任何行上,因为 id> 每十列完成后
完成 break/split 到先前相同部分的较短版本,例如 "LIB A OPENV" 添加文本。
预期输出:
place library>LIB site>A plat>WIN9K id>1a 1b 1c 1d
place library>LIB site>A plat>OPENV id>1a 1b 1c 7 7de 7e 7r 7t 74 71
place library>LIB site>A plat>OPENV id>73 744 77 75 724 75 71 72
place library>LIB site>B plat>SUSE id>2a 2b 3c 4a
place library>LIB site>A plat>LINUX id>1b 8b 9a 3c 8a
awk '
NR > 1{
d[]="place library>" " site>" " plat>" " id>"
if ( in c) c[]=c[] "," # append value with comma
else c[]= # set initial value
}
END{
nl=""
for (p in d){
n=split(c[p], a, ",") # split value into array a
for (i=1;i<=n;i++){
printf (i%10==1 ? nl d[p] : OFS) a[i]
nl=ORS # add newline
}
}
print ""
}
' file1
我有这个输入文件
输入:文件1
LIB SITE LINUX A FEDORA 1a 22 X64 DC58 ROOM DC LOC 2.b
LIB SITE LINUX A FEDORA 1b 22 X64 DC58 ROOM DC LOC 2.b
LIB SITE OPENV A OPENV 1a 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE OPENV A OPENV 1b 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE OPENV A OPENV 1c 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1a 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1b 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1c 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE WIN9K A WIN9K 1d 22 X64 DC22 ROOM DC LOC 2.b
LIB SITE SUSE B SUSE 2a 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE SUSE B SUSE 2b 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE SUSE B SUSE 3c 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE SUSE B SUSE 4a 22 X64 DC10 ROOM DE LOC 3.ma
LIB SITE LINUX A CENTOS 8b 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE LINUX A CENTOS 9a 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE LINUX A CENTOS 3c 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE LINUX A CENTOS 8a 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7de 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7e 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7r 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 7t 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 74 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 71 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 73 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 744 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 77 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 75 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 724 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 75 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 71 22 X64 DC41 ROOM DF LOC 5.p
LIB SITE OPENV A OPEN1 72 22 X64 DC41 ROOM DF LOC 5.p
我有这个:
awk -v OFS=" " 'NR > 1 {d[]= OFS ; c[] = c[] OFS } END {for (p in d) print d[p] OFS parent c[p]}' file1
将输出到这个:
LIB A WIN9K 1a 1b 1c 1d
LIB A OPENV 1a 1b 1c 7 7de 7e 7r 7t 74 71 73 744 77 75 724 75 71 72
LIB B SUSE 2a 2b 3c 4a
LIB A LINUX 1b 8b 9a 3c 8a
我尝试将多个管道命令放入以下格式,其中也是在任何行上,因为 id> 每十列完成后 完成 break/split 到先前相同部分的较短版本,例如 "LIB A OPENV" 添加文本。
预期输出:
place library>LIB site>A plat>WIN9K id>1a 1b 1c 1d
place library>LIB site>A plat>OPENV id>1a 1b 1c 7 7de 7e 7r 7t 74 71
place library>LIB site>A plat>OPENV id>73 744 77 75 724 75 71 72
place library>LIB site>B plat>SUSE id>2a 2b 3c 4a
place library>LIB site>A plat>LINUX id>1b 8b 9a 3c 8a
awk '
NR > 1{
d[]="place library>" " site>" " plat>" " id>"
if ( in c) c[]=c[] "," # append value with comma
else c[]= # set initial value
}
END{
nl=""
for (p in d){
n=split(c[p], a, ",") # split value into array a
for (i=1;i<=n;i++){
printf (i%10==1 ? nl d[p] : OFS) a[i]
nl=ORS # add newline
}
}
print ""
}
' file1