我知道通过谷歌搜索这应该是一件容易的事,但没有成功。对此感到抱歉。
我想打印第一列中定义的值的组的第一行。分隔符是制表符。
输入:
A 5
A 3
B 2
B 1
B 77
C 4
C 10000
D 99
输出:
A 5
B 2
C 4
D 99
答案1
最短的:
awk -F'\t' '!a[$1]++' file
输出:
A 5
B 2
C 4
D 99
!a[$1]++
- 确保在遇到第一列的第一个唯一值时进行行打印
答案2
类似的东西可以完成这项工作:
awk -F\t 'BEGIN {A=""} {if ($1!=A) { print $0; A=$1}}' input_file
初始化变量 A 时,选择不在第一列现有列表中的初始值
答案3
以下是两个非 awk 选项:
sort u foo -k 1,1
sort
纯粹用于-u
( --unique
) 功能。仅使用第一个字符 ( -k 1,1
) 进行比较。
rev foo | uniq -f 1 | rev
使用uniq
。该-f
选项只允许指定一个开始字段进行比较,因此我们使用一些诡计首先反转 ( rev
) before 的输入uniq
,然后rev
再次输出该输出。