AWKを使用して特定の列で特定の値を持つ行を選択する

AWKを使用して特定の列で特定の値を持つ行を選択する

次のような大きな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コンピュータで作成されたでしょう。

dos2unixUnixテキストファイルに変換するために使用されます。

または、以下から実行してください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

おすすめ記事