Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux:按具有相同值的列合并行_Linux_Bash_File_Merge - Fatal编程技术网

Linux:按具有相同值的列合并行

Linux:按具有相同值的列合并行,linux,bash,file,merge,Linux,Bash,File,Merge,有没有合并行的方法,如: 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 0

有没有合并行的方法,如:

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.从第1列中获取在2,n列(707270797091)上具有相同值的数字(ID) 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
它将产生的输出为(仅保留第一次出现并过滤所有其他内容)

我们创建一个数组
seen
,并使用第二列作为键。当第一次看到该行时,数组中该行的计数为零,因此我们对其求反,使其值为1,并在默认情况下打印它。所有后续时间,该值都将大于0,因此我们将其取反,使其为0并对其进行过滤


如果这不是您想要的,请更新您的问题,以显示基于某些示例数据的所需输出

除非我不明白你的问题。。以下内容将为您提供所需的输出:

$ uniq -s 4 input.txt |cut -d ";" -f 1

7072
7072

当你说你想从第1列中得到在2,n列(707270797091)上具有相同值的数字(ID)时,这到底意味着什么?当你“得到”它们时,你想用它们做什么?把它们放在什么地方?然后,当您显示输出时,您是说您只想显示id列中唯一不同的第一行吗?也许一个更详细的示例(输入和输出)会有所帮助。我合并了几个数据库,并且有许多具有不同ID的副本(因为数据库是由不同的人独立创建的)。我只想留下唯一的条目,并为每个条目分配一个ID(最好的方法就是留下一个条目),如果您只需要打印第一列,那么您可以通过说
awk-F';''来修改它!已查看[$2]+{print$1}'文件
$ uniq -s 4 input.txt |cut -d ";" -f 1

7072
7072