Linux
使用 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。誰能告訴我我做錯了什麼?謝謝。
執行腳本的文件具有 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
.