1

次のようなファイルがあるとします。

apple   2018-01-01
apple cider 2018-01-05
apple cider 2017-01-06
lemon   2016-12-30
lemon   2017-12-31
lemon juice 2018-03-12
lemon pie 2018-03-30

つまり、1 つ以上のテキスト列と日付があります。また、いくつかのテキスト エントリは [異なる] 日付で重複しています。ここで、これらの重複を削除します。

apple   2018-01-01
apple cider 2017-01-06
lemon   2016-12-30
lemon juice 2018-03-12
lemon pie 2018-03-30

1 つの列にある場合は、このソリューションを使用できます。しかし、特定の列を検索する代わりに、正規表現を使用して重複を検索する必要がある場合はどうすればよいでしょうか? これを処理できますawkか?または、他の回避策はありますか?

ありがとう。

4

2 に答える 2

1

あなたはそれを行うことができますawk

awk 'BEGIN{FS="\\s+2"}{a[$1]=2""$2}END{for(i in a){print i,a[i]}}' file.input | sort
apple 2018-01-01
apple cider 2017-01-06
lemon 2017-12-31
lemon juice 2018-03-12
lemon pie 2018-03-30

このソリューションは、表示される最後の値が重複して表示される場合にのみ保持されます。動作を変更したい場合は、いくつかの条件を追加して、値が新しい場合などに値を置き換えることができます。

操作を行う前にファイルをソートすることもできます。

説明:

  • FS="\\s+2最初の列と日付の間にフィールド区切りを設定します(日付は2で始まると思います)
  • {a[$1]=2""$2}次に、インデックスが最初の列である配列を作成し、表示されたときに値を割り当てます。
  • END{for(i in a){print i,a[i]}}結果を印刷するだけです
于 2018-05-01T05:12:00.363 に答える