合并具有重复字段的行中的标签

合并具有重复字段的行中的标签

我有一个相当大的文本文件(数千行),格式如下:

123.123 5  
123.123 91  
156.456 45  
233.185 85  
233.185 4  
257.448 1  
455.456 60  
455.456 2

第一列是排序坐标 (xy),第二列是标签(0 到 1000)。可以看出,坐标 123.123 有标签 5 和标签 91,或者坐标 156.456 只有标签 45

我想要另一个文件作为包含所有坐标(不重复)和不同标签(此标签将出现多次重复)的输出,此示例的输出必须是:

123.123  5   91  
156.456  45   
233.185  85  4  
257.448  1  
455.456  60  2   

我的想法是删除重复的字符串(坐标,因此只有第一列),留下标签,然后重新组织行或以其他方式,但我坚持使用哪些命令。
另一种选择是使用数据库。

答案1

看起来像是 awk 的工作

 awk '{ c[$1]=c[$1] "\t" $2 ; } END { for ( c2 in c ) printf c2 c[c2] "\n" ; } '

在哪里

  • c[$1]=c[$1] "\t" $2 将存储标签,
  • END子句在文件末尾运行。
  • for ( c2 in c ) printf c2 c[c2] "\n" ;将遍历坐标,打印标签。

答案2

perl -p0e 'while(s/^(\S+)( .*)(\n\1)/\1\2/m){}'

基本思想是:

  • -p0将文件加载到内存中并最后打印;
  • -e对加载的文件执行下一个参数
  • 如果可能的话,替换<word> <line>\n<word><word> <line>

相关内容