以CSV格式查找仅出现一次的值

时间:2016-01-13 20:52:32

标签: csv awk

我有一个包含数千行的csv文件。我希望能够找到仅在此文件中出现一次的值。

例如

cat
bird

我想得到我的结果:

awk

我尝试使用以下awk -F"," '{print $1}' test.csv|sort|uniq 命令,但它返回了文件中每个值的一个:

dog
cat
bird

返回:

{{1}}

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

只是用awk:

awk -F, '{count[$1]++} END {for (key in count) if (count[key] == 1) print key}' test.csv

答案 1 :(得分:1)

关闭。尝试:

awk -F"," '{print $1}' test.csv |sort | uniq -c | awk '{if ($1 == 1) print $2}'

uniq上的-c标志会给你计数。接下来awk将查找计数为1(第一个字段)的任何项目并打印第二个字段的值($ 2)

唯一需要注意的是,由于它之前已被摧毁,因此它会在猫之前返回。你可以再次管道到sort -r以反转排序方向。这与您要求的预期答案相同,但原始排序顺序。

答案 2 :(得分:0)

切换到第一个字段,然后排序并仅显示唯一字段:

cut -d ',' -f 1 test.csv | sort | uniq -u

也就是说,如果您将-u附加到命令中,它就会起作用。这只是使用cut而不是awk。

答案 3 :(得分:0)

如果Perl是一个选项,此代码类似于@glenn jackman&#39:

perl -F, -lane '$c{$F[0]}++; END{for $k (sort keys %c){print $k if $c{$k} == 1}}' test.csv

使用以下命令行选项:

  • -n循环输入文件的每一行
  • -l在处理之前删除换行符,然后将其添加回来
  • -a autosplit模式 - 将输入行拆分为@F数组。默认为在空格上拆分。
  • -e执行perl代码
  • -F autosplit修饰符,在这种情况下会在,
  • 上拆分

@F是每行中的单词数组,以$F[0]

开头编制索引