awk: "field-2 - field-3" 差が最も小さい各 field-1 値 (相違) に対して 1 行を印刷します。

awk:

印刷時に細かい違いで線を区切りたいです。 (差=$2-$3)

入力ファイルは次のとおりです。

c1,5,2         <-- diff=3
c1,5,3         <-- diff=2
c1,5,1         <-- diff=4
c2,8,3         <-- diff=5
c2,8,4         <-- diff=4

予想される出力は次のとおりです。

c1,5,3  
c2,8,4  

awkを使用してこれを行うにはどうすればよいですか(例:1行のコードを使用)。


つまり、最初のフィールド値(c1、c2)ごとに、最初のフィールド値を含む単一行を印刷したいとします。これは、選択された2番目のフィールドと3番目のフィールドの最小差です。

ベストアンサー1

楽しむアッ解決策:

awk -F, '{ diff=$2-$3; if(a[$1]>diff || !a[$1]) { a[$1]=diff; b[$1]=$2 FS $3 } }
         END{ for(i in a) print i,b[i] }' OFS=',' yourfile

出力:

c1,5,3
c2,8,4

おすすめ記事