我有一个像这样的制表符分隔的 CSV 文件
C1 C2
A 3
B 4
C 5
B 4
A 3
如何消除第 1 列中的重复项并为每个唯一的第 1 值输出第 2 列中的值?输出示例:
3
4
5
我尝试过awk -F '\t' '{print $1}' file_name.csv | sort | uniq -c
对第一列中的数据进行排序并“删除”重复项,但这会删除第二列。我只是 shell 脚本编写的初学者,因此任何帮助都可以。
答案1
awk -F '\t' 'NR>1 && !seen[$1]++{print $2}' file_name.csv
NR>1
第一行为 false,则跳过。!seen[$1]++
只有 1(或真的)对于第一次解析的第一个字段值(重复评估为 0,或错误的)。print $2
如果满足两个条件,则打印第二个字段。
答案2
awk
使用您的非版本sort
和uniq
tail -n +2 file | sort -ugk2 | column -t -H 1
tail
通过打印起始行号来-n
丢失标题+2
file
tail -n +2 file |
sort
-u
在ey上使用-g
通用数字的独特之处-k
2
sort -ugk2 |
并输出为column
arable-t
但-H
ide 列1
column -t -H 1
答案3
如果您只想要前两列,您可以使用:
awk -F '\t' '!seen[$1]++{print $2}' testfile
答案4
磨坊主有一个分组head
,可以让你拿第一个n与特定列值匹配的记录(在本例中,n=1):
$ mlr --tsv head -g C1 -n 1 then cut -f C2 file.tsv
C2
3
4
5
如果您不需要列标题,请保留tsv
输入格式,但将输出格式更改为索引:
mlr --itsv --onidx head -g C1 -n 1 then cut -f C2 file.tsv