如何删除第一列中的重复项并输出第二列中的值?

如何删除第一列中的重复项并输出第二列中的值?

我有一个像这样的制表符分隔的 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使用您的非版本sortuniq

tail -n +2 file | sort -ugk2 | column -t -H 1

tail通过打印起始行号来-n丢失标题+2file

tail -n +2 file | 

sort -u在ey上使用-g通用数字的独特之处-k2

sort -ugk2 | 

并输出为columnarable-t-Hide 列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

相关内容