我有一个相当大的文本文件(数千行),格式如下:
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>