Shell

刪除欄位值小於或等於 3 的行 - sed 還是 awk?

  • October 23, 2019

我需要刪除第 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 ) )相同,包括標題

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