2016-04-26 65 views
1

我想根据索引号重新定位字符串。使用awk/sed重定位字符串

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

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

+0

尝试使用$ 1作为数组索引,并附加空间和$ 2到它。在END规则中,打印出数组的每个元素。 – ReluctantBIOSGuy

+0

请看看:[我应该怎么做当有人回答我的问题?](http://stackoverflow.com/help/someone-answers) – Cyrus

回答

2

使用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 
+0

这工程!谢谢! –

1

我的版本:

$ 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 

因为索引号进行排序,我们只是打印第二列,但不换行值。当索引号改变时,我们正在打印换行符。