特定の列の特定の値に基づいてファイルから行を除外する

特定の列の特定の値に基づいてファイルから行を除外する

Linux サーバー CentOS 7 に、次の形式のエントリが多数含まれたテキスト ファイルがあります。

1234567890123456, 1, 17, cde, Test Test
1234567890123456, 2, 17, cde, Test Test
1234567890123456, 3, 17, cde, Test Test
1234567890123456, 4, 17, cde, Test Test
1234567890123456, 5, 17, cde, Test Test
1234567890123456, 1, 18, cde, Test Test
1234567890123456, 1, 17, cde, Test Test

削除するにはどのコマンドを使用すればよいですか

1, 17
2, 17
3, 17
4, 17

結果は

1234567890123456, 5, 17, cde, Test Test
1234567890123456, 1, 18, cde, Test Test

答え1

awkアプローチ:

awk -F, '!($2<5 && $3==17)' file

出力:

1234567890123456, 5, 17, cde, Test Test
1234567890123456, 1, 18, cde, Test Test

  • -F,- フィールドセパレータ

  • $2$3- それぞれ2番目と3番目のフィールドを表します

答え2

フィールド 3 の除外が常に「17」であるという共通性を利用して、それらの正確な値を除外するには、次のようにします。

awk -F, '!($3 == 17 && ($2 == 1 || $2 == 2 || $2 == 3 || $2 == 4))' < input > output

関連情報