如果列中的值发生变化则打印行

如果列中的值发生变化则打印行

我知道通过谷歌搜索这应该是一件容易的事,但没有成功。对此感到抱歉。

我想打印第一列中定义的值的组的第一行。分隔符是制表符。

输入:

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再次输出该输出。

相关内容