4番目の列に基づいてソート

4番目の列に基づいてソート

filename.csv次の内容を含むCSVファイルがあります。

ファイル名.csv:

"Afghanistan","94.0","81.1"
"Bahamas","42.9","43.2"
"Bolivia (Plurinational State of)","86.7","31.9"
"Brazil","76.7","0.0"

2つの列(列2 - 列3)の違いを計算し、出力を4列目に貼り付けたいです。次に、4番目の列に基づいて数字をソートしたいと思います。しかし、私が使用するコマンドは、4番目の列に基づいてソートされません。

私が使用したコマンドは次のとおりです。awk -F'","' '{ print $0, $2 - $3 }' filename.csv | sort -k4 -n

私が得た結果は次のとおりです。

"Afghanistan","94.0","81.1" 12.9
"Bahamas","42.9","43.2" -0.3
"Bolivia (Plurinational State of)","86.7","31.9" 54.8
"Brazil","76.7","0.0" 76.7

期待される出力ファイル:

"Bahamas","42.9","43.2","-0.3"    
"Afghanistan","94.0","81.1","12.9"
"Bolivia (Plurinational State of)","86.7","31.9","54.8"
"Brazil","76.7","0.0","76.7"

助けてくれてありがとう。ありがとうございます!

ベストアンサー1

あなたが経験している問題は、[sort]が空白ではなく空白から空白への変換をフィールド変換として理解し、-tを使用してフィールド区切り文字を定義していないため、「、」の代わりにデフォルト値を使用することです。しかし、awkに「、」を含めることを忘れたので、次のように変更すると:

awk -F'","' '{ print $0, $2 - $3 }' filename.csv| sort -k2 -n

あなたは得るでしょう:

"Bahamas","42.9","43.2" -0.3
"Bolivia (Plurinational State of)","86.7","31.9" 54.8
"Afghanistan","94.0","81.1" 12.9
"Brazil","76.7","0.0" 76.7

ただし、これはコンマの問題のために期待したものとは異なり、次のように解決されます。

awk -F'","'  'BEGIN {IFS=OFS=","}{ print $0, $2 - $3 }' entrada | sort -k4 -n -t","

期待される結果を得る。

"Bahamas","42.9","43.2",-0.3
"Afghanistan","94.0","81.1",12.9
"Bolivia (Plurinational State of)","86.7","31.9",54.8
"Brazil","76.7","0.0",76.7

CSVはテキストフィールド内にカンマがある傾向があり、これを防ぐために別の解析を実行し、別のOFSを作成してソートに使用する必要があるフィールドを参照して処理されるため、このアプローチの使用は少し消極的です。 OFS を前のコンマに戻します。

ファタイ

おすすめ記事