我有一个包含数千行的csv文件。我希望能够找到仅在此文件中出现一次的值。
例如
cat
bird
我想得到我的结果:
awk
我尝试使用以下awk -F"," '{print $1}' test.csv|sort|uniq
命令,但它返回了文件中每个值的一个:
dog
cat
bird
返回:
{{1}}
感谢您的帮助!
答案 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]