Shell
刪除欄位值小於或等於 3 的行 - sed 還是 awk?
我需要刪除第 8 個欄位(列)中值為 2 或更少的每一行。
我的數據如下所示:
12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8 01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1 01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4 01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6
我知道使用 awk 我可以刪除所需的值並將它們列印到另一個文件,並且我知道 sed 會編輯目前文件。無論哪種情況,我都需要保留原始文件。
注意:請在您的解決方案中提供詳盡的解釋。僅僅寫命令是不夠的,請註釋建議。
進一步說明:數據有一個標題行,所以最有可能的解決方案需要
awk ‘FNR > 1’
我想?
你幾乎明白了。
awk '(NR>1) && ($8 > 2 ) ' foo > bar
在哪裡
NR
是記錄數(即行數)$8
是八場&&
是合乎邏輯的foo
是原始文件,未更改bar
結果文件- 隱式預設操作是列印目前輸入行
請注意,標題是從 foo 到 bar 的條紋,以保留它
awk '(NR==1) || ($8 > 2 ) ' foo > bar
在哪裡
||
是合乎邏輯的或- 如果 NR==1 或 $8 > 2 則列印輸入行
更新#1
指定範圍
( ($8 >= -4) && ( $8 <= 4 ) )
從 -4 到 4 的第 8 個欄位(NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) )
相同,包括標題