awk使用添加的文本转置特定列,并在第n列上完成拆分,因为在

awk使用添加的文本转置特定列,并在第n列上完成拆分,因为在,awk,transpose,line-breaks,Awk,Transpose,Line Breaks,我有这个输入文件 输入:文件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

我有这个输入文件

输入:文件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[$3]=$1 OFS $4; c[$3] = c[$3] OFS $6} 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>在每十列完成之后 完成之前相同部分的较短版本的打断/拆分,例如添加文本的“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[$3]=“place library>“$1”站点>“$4”平台>“$3”id>”
如果c中的($3)c[$3]=c[$3],“$6#用逗号追加值
否则c[$3]=$6#设置初始值
} 
结束{
nl=“”
对于(d中的p){
n=拆分(c[p],a,“,”)#将值拆分为数组a
对于(i=1;i
awk'
NR>1{
d[$3]=“place library>“$1”站点>“$4”平台>“$3”id>”
如果c中的($3)c[$3]=c[$3],“$6#用逗号追加值
否则c[$3]=$6#设置初始值
} 
结束{
nl=“”
对于(d中的p){
n=拆分(c[p],a,“,”)#将值拆分为数组a

对于(i=1;只有一个小问题:如何设置逗号分隔符在ID的第6列之后可见,感谢您在
printf
语句中替换
OFS
,该语句默认为
“,”
或您需要的任何字符串。只有一个小问题:如何设置逗号分隔符,使其在ID的第6列中可见,感谢您在
printf
语句中替换
OFS
,该语句默认将空格字符设置为
”、“
或您需要的任何字符串。
awk '
  NR > 1{
    d[$3]="place library>" $1 " site>" $4 " plat>" $3 " id>"
    if ($3 in c) c[$3]=c[$3] "," $6  # append value with comma
    else c[$3]=$6                    # 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