列の値が変更された場合の行の印刷

列の値が変更された場合の行の印刷

私はこれがインターネット検索で簡単に行うことができますが、成功しないことを知っています。すみません。

最初の列で定義された値グループの最初の行を印刷したいと思います。区切り文字はタブ文字です。

入力する:

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ではなく2つのオプションです。

sort u foo -k 1,1

sort-u()機能にのみ使用されます--unique-k 1,1比較には最初の文字()のみが使用されます。

rev foo | uniq -f 1 | rev

使用uniq。この-fオプションは比較する開始フィールドのみを指定できるようにするため、最初に入力をrev反転()しuniqてから、revその出力を再出力するためのいくつかのトリックを使用します。

関連情報