質問: フィールドの値が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は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 ) )同じ、ヘッダーを含む