次のような大きなCSVファイルがあります。
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,25178
1,2,3,4,5,6,27986
1,2,3,4,5,6,-99
7番目の列が-99の行のみを選択しようとしているので、出力は次のようになります。
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
1,2,3,4,5,6,-99
私は以下を試しました:
awk -F, '$7 == -99' input.txt > output.txt
awk -F, '{ if ($7 == -99) print $1,$2,$3,$4,$5,$6,$7 }' input.txt > output.txt
ただし、すべて空の output.txt を返します。誰かが私が間違っていることを教えてもらえますか?ありがとうございます。
ベストアンサー1
スクリプトを実行するファイルにはDOS行の終わりがあります。それはおそらく、Windowsコンピュータで作成されたでしょう。
dos2unix
Unixテキストファイルに変換するために使用されます。
または、以下から実行してくださいtr
。
tr -d '\r' <input.txt >input-unix.txt
input-unix.txt
次に、元の正しいコードを使用してくださいawk
。
awk
入力ファイルの代わりにコードを変更するには、次の手順に従ってください。
awk -F, '$7 == "-99\r"' input.txt >output.txt
これは行末のキャリッジリターンを考慮します。
または、
awk -F, '$7 + 0 == -99' input.txt >output.txt
これにより、7番目の列が数値として解釈され、キャリッジリターンが「削除」されます。
同様に、
awk -F, 'int($7) == -99' input.txt >output.txt
また削除されます\r
。