重複したファイルがある場合は、ファイルを並べ替えて最新のレコードを出力するにはどうすればよいですか?

重複したファイルがある場合は、ファイルを並べ替えて最新のレコードを出力するにはどうすればよいですか?

APIを介して受信したすべてのリクエストをファイルに保存します。重複リクエストが届いたら、最新のリクエストのみを処理したいと思います。

ソートコマンドは役に立ちません。以下を使用しています。

sort -r -k 1.69,1.88 ./InputFile | sort -k 1.70,1.88 -u   > ./sortedReqFile

アイデアはファイルを反転して一意のエントリを取得することですが、-uを使用して入力ファイルを直接ソートするのと同じ結果を提供します。

答え1

ただ奇妙な推測だけです。

 awk '{A[substr($0,69,88)]=$0 ; } END { for ( b in A ) print A[b] ;}' InputFile |
 sort -k 1.70,1.88 -u   > sortedReqFile
  • awk は、69 から 88 文字の同じ範囲を持つ行の最後の項目を保持します。
  • b配列へのインデックスとして使用されますA
  • ./データファイルの前半は必要ありません。

質問した内容

ファイルを反転すると、sort -uが同じ結果を提供するのはなぜですか?

重要なのは、最初のソートでは行が変更されず、最終ソートコマンドには役に立たないことです。行を変更または削除しない場合は、それらの間に必要なだけsort追加できますtac

ファイルをアルファベット順にソートするとしますH E L L O W O R L D(1行の各文字)。

  • ファイルの並べ替え:D E H L L L O O R W
  • -rファイルのソート:W R O O L L L H E D
  • ソート-rファイル|ソート -u:D E H L O R W
  • -uファイルのソート:D E H L O R W

関連情報