특정 패턴으로 시작하는 값이 없는 파이프로 구분된 파일에서 줄을 가져오는 방법은 무엇입니까?

특정 패턴으로 시작하는 값이 없는 파이프로 구분된 파일에서 줄을 가져오는 방법은 무엇입니까?

특정 패턴으로 시작하는 값이 없는 행만 가져오려고 합니다.

입력 파일(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

답변2

$  grep -v '|A[PRF]-' test_file.txt 

grep 기반 솔루션입니다.

$ sed -e '/^[^|]*[|]A[PRF]-/d' test_file.txt > test_filtered.txt

입력의 너비가 2개 필드인 경우 다음을 수행할 수 있습니다.

$ sed -e '/[|]A[PRF]-/d' test_file.txt > test_filtered.txt

참고: [|]간단한 내용으로도 | 충분하더라도 글을 쓰고 있습니다. 이는 변경 없이 정규식 및 확장 정규식 모드 모두에서 작동하도록 하기 위한 것입니다. IOW, 이것은 POSIX 및 GNU sed xtended regex와 함께 작동합니다.

관련 정보