次のようなファイルがあります。
2011-03-21 name001 line1
2011-03-21 name002 line2
2011-03-21 name003 line3
2011-03-22 name002 line4
2011-03-22 name001 line5
それぞれの名前について、私はその最後の外観だけが欲しいです。したがって、結果は次のようになると思います。
2011-03-21 name003 line3
2011-03-22 name002 line4
2011-03-22 name001 line5
誰かがbash/awk/sedで解決策を教えてもらえますか?
このコードは、2番目のフィールドごとに一意の行を取得しますが、ファイルまたはテキストの終わりから取得します(結果の例のように)
tac temp.txt | sort -k2,2 -r -u
awk '{a[$2]=$0} END {for (i in a) print a[i]}' file
出現順序が重要な場合:
初登場に基づく:
awk '!a[$2] {b[++i]=$2} {a[$2]=$0} END {for (i in b) print a[b[i]]}' file
最後の出現に基づく:
tac file | awk '!a[$2] {b[++i]=$2} {a[$2]=$0} END {for (i in b) print a[b[i]]}'
sort < bar > foo
uniq < foo > bar
バーに重複行がなくなりました
編集:これは実際に質問に答えるバージョンです。
sort -k 2 filename | while read f1 f2 f3; do if [ ! "$f2" = "$lf2" ]; then echo "$f1 $f2 $f3"; lf2="$f2"; fi; done