使用awk/sed重新定位字符串

使用awk/sed重新定位字符串,awk,sed,relocation,Awk,Sed,Relocation,我想根据索引号重新定位字符串 索引号显示在第一列,字符串显示在第二列 1 path_sparc_ifu_dec_104 1 path_sparc_ifu_dec_105 2 path_sparc_ifu_dec_63 2 path_sparc_ifu_dec_92 3 path_sparc_ifu_dec_39 4 path_sparc_ifu_dec_43 4

我想根据索引号重新定位字符串

索引号显示在第一列,字符串显示在第二列

 1        path_sparc_ifu_dec_104  
 1        path_sparc_ifu_dec_105  
 2        path_sparc_ifu_dec_63  
 2        path_sparc_ifu_dec_92 
 3        path_sparc_ifu_dec_39  
 4        path_sparc_ifu_dec_43  
 4        path_sparc_ifu_dec_71  
 5        path_sparc_ifu_dec_103  
 6        path_sparc_ifu_dec_99  
 7        path_sparc_ifu_dec_55 
 7        path_sparc_ifu_dec_75  
 7        path_sparc_ifu_dec_93
如果索引号为1,则相应的字符串放置在第一行。同时,索引编号被删除

所需输出为:

path_sparc_ifu_dec_104  path_sparc_ifu_dec_105  
path_sparc_ifu_dec_63  path_sparc_ifu_dec_92 
path_sparc_ifu_dec_39  
path_sparc_ifu_dec_43  path_sparc_ifu_dec_71  
path_sparc_ifu_dec_103  
path_sparc_ifu_dec_99  
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93
我认为awk/sed可以逐列读取文件并重新定位字符串,但我需要帮助

对于这个问题,我将不胜感激

最好的

Jaeyoung

我的版本:

$ awk '{if(prev==$1){printf(" ")}else{if(NR!=1){printf("\n")}};printf("%s",$2);prev=$1}END{printf("\n")}' file
path_sparc_ifu_dec_104 path_sparc_ifu_dec_105
path_sparc_ifu_dec_63 path_sparc_ifu_dec_92
path_sparc_ifu_dec_39
path_sparc_ifu_dec_43 path_sparc_ifu_dec_71
path_sparc_ifu_dec_103
path_sparc_ifu_dec_99
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93

因为索引号是排序的,所以我们只打印第二列的值,而不打印换行符。当索引号更改时,我们将使用awk打印换行符。

$ awk '{
    lines[$1] = ( $1 in lines ? lines[$1] FS $2 : $2 )
  } END {
     for (x in lines) print lines[x]
 }' file
path_sparc_ifu_dec_104 path_sparc_ifu_dec_105
path_sparc_ifu_dec_63 path_sparc_ifu_dec_92
path_sparc_ifu_dec_39
path_sparc_ifu_dec_43 path_sparc_ifu_dec_71
path_sparc_ifu_dec_103
path_sparc_ifu_dec_99
path_sparc_ifu_dec_55 path_sparc_ifu_dec_75 path_sparc_ifu_dec_93

尝试使用$1作为数组索引,并在其中附加一个空格和$2。在结束规则中,打印出数组的每个元素。