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
レコード数(つまり行数)。$8
8つのフィールドです&&
論理的で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 ) )
タイトルを含む同じ