有什么方法可以像这样合并行:
7072;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7079;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7091;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7113;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7128;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7159;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7168;understand;-;F;18;IT;MN;2009-03-18 00:00:00
变成一个:
7072;understand;-;F;18;IT;MN;2009-03-18 00:00:00
基本上,我需要:
1. 从第一列中获取在 2,n 列上具有相同值的数字 (ID) (7072, 7079,7091)
2. 删除重复项:只保留第一个 (7072)
还有其他条目,例如
7072;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7079;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7091;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7113;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7128;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7159;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7168;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
我只需要离开 7072。 最后,似乎我必须获得这些数字并进行替换
sed 's/^id;.*//g'
最佳答案
要根据第二列(即 understand
和 mystify
)删除重复项,您可以使用以下 awk
脚本来保留第一个副本行并过滤其他所有内容:
awk -F';' '!seen[$2]++' file
对于如下文件:
$ cat file
7072;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7079;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7091;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7113;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7128;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7159;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7168;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7072;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7079;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7091;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7113;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7128;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7159;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
7168;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
它将产生一个输出(只保留第一次出现并过滤其他所有内容)
$ awk -F';' '!seen[$2]++' file
7072;understand;-;F;18;IT;MN;2009-03-18 00:00:00
7072;mistify;-;F;18;IT;MN;2009-03-18 00:00:00
我们创建一个数组 seen
并使用第二列作为键。当第一次看到该行时,它在我们数组中的计数为零,因此我们将其取反,使其值为 1 并默认打印它。所有后续时间该值都将大于 0,因此我们将其取反以使其变为 0 并对其进行过滤。
如果这不是您想要的,请更新您的问题以根据一些样本数据显示您想要的输出。
关于Linux:按具有相同值的列合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23807092/