在 CSV 中查找重复的列值

Emi*_*lio 5 text-processing csv

我试图从一个大的 csv 文件中找到重复的 id,每行只有一个记录,但找到重复的条件将是第一列。 <id>,<value>,<date>

示例.csv

11111111,high,6/3/2019
22222222,high,6/3/2019
33333333,high,6/3/2019
11111111,low,5/3/2019
11111111,medium,7/3/2019
Run Code Online (Sandbox Code Playgroud)

期望的输出:

11111111,high,6/3/2019
11111111,low,5/3/2019
11111111,medium,7/3/2019
Run Code Online (Sandbox Code Playgroud)

输出不需要顺序。

Ste*_*itt 5

使用 AWK:

awk -F, 'data[$1] && !output[$1] { print data[$1]; output[$1] = 1 }; output[$1]; { data[$1] = $0 }'
Run Code Online (Sandbox Code Playgroud)

这会查看每一行,其行为如下:

  • 如果我们已经看到第一列中的值,请注意我们应该输出匹配的任何行,并输出记忆的行;
  • 如果当前行的第一列与我们要输出的列匹配,则输出当前行;
  • 存储在第一列上键入的当前行。


ter*_*don 5

如果您的所有 ID 长度都相同(在您的示例中为 8 个字符),您可以使用sortGNU完成整个操作uniq

$ sort file | uniq -Dw 8
11111111,high,6/3/2019
11111111,low,5/3/2019
11111111,medium,7/3/2019
Run Code Online (Sandbox Code Playgroud)

如果它们的长度不同,您仍然可以使用这种方法,但它会变得更复杂一些:

$ tr ',' ' ' < file | sort  | rev | uniq -f2 -D | rev | tr ' ' ','
11111111,high,6/3/2019
11111111,low,5/3/2019
11111111,medium,7/3/2019
Run Code Online (Sandbox Code Playgroud)