特定のパターンで始まる値のないパイプで区切られたファイルから行を取得する方法は?

特定のパターンで始まる値のないパイプで区切られたファイルから行を取得する方法は?

特定のパターンで始まる値のない行だけを取得しようとしています。

入力ファイル(test_file.txt)

USER1|AR-45233|
USER4|AR-32133|
USER1|45232|
USER1|AF-45233|
USER2|AR-12321|
SYSTEM1|A9-12312|
USER1|AP-67655|

期待される出力(test_filtered.txt)

USER1|45232|
SYSTEM1|A9-12312|

私はこれを試しましたが、効果があるようです。同じ目標を達成するためのより良い方法はありますか?

awk -F "|" '{if ($2!~/AP-/ && $2!~/AR-/ && $2!~/AF-/) {print $0}}' test_file.txt > test_filtered.txt

上記のような基準に合わないラインを抽出して、このように別のファイルに書きたいのですが、そうすることができないので、このように質問します。

awk -F "|" '{if ($2~/AP-/ && $2~/AR-/ && $2~/AF-/) {print $0}}' test_file.txt > test_to_remove.txt

ベストアンサー1

ミラーの使用(https://github.com/johnkerl/miller) はい

mlr --csv --fs "|" --implicit-csv-header --headerless-csv-output filter -x -S '$2=~"^A[RFP]-"' input >output

おすすめ記事