Linux

使用 AWK 在特定列中選擇具有特定值的行

  • July 26, 2021

我有一個很大的 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。誰能告訴我我做錯了什麼?謝謝。

執行腳本的文件具有 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.

引用自:https://unix.stackexchange.com/questions/399560