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 を前のコンマに戻します。
ファタイ
答え2
代わりに、スペースを使用するようにOFSを使用して出力フィールド区切り文字を指定することをお勧めします,
。次に、-t
ソートオプションを使用してフィールド区切り文字を指定できます。
awk -F'","' 'OFS=","{ print $0,$2-$3 }' filename.csv | sort -t ',' -k4 -n