フィールド値が3以下の行を削除します - sedまたはawk?

フィールド値が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'

私の考えでは?

答え1

あなたはほとんどそれを理解しています。

 awk '(NR>1) && ($8 > 2 ) ' foo > bar

どこ

  • NRレコード数(つまり行数)。
  • $88つのフィールドです
  • &&論理的で
  • foo変更されていないソースファイルです。
  • bar結果ファイル
  • 暗黙的なデフォルトの動作は、現在の入力行を印刷することです。

ヘッダーは保存するためにfooからbarにストライプされています。

 awk '(NR==1) || ($8 > 2 ) ' foo > bar

どこ

  • ||論理的または
  • NR==1 または $8 > 2 の場合、入力行を印刷します。

アップデート#1

範囲指定

  • ( ($8 >= -4) && ( $8 <= 4 ) )8番目のフィールドは-4から4までです。
  • (NR == 1 ) || ( ($8 >= -4) && ( $8 <= 4 ) )タイトルを含む同じ

関連情報