특정 패턴으로 시작하는 값이 없는 행만 가져오려고 합니다.
입력 파일(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와 함께 작동합니다.