다음 스크립트를 사용하세요.
awk '{print $0"\t"NR}' test | grep NA | awk '{print $21}'
"NA"가 포함된 파일에서 줄 번호를 얻고 있습니다.
326
399
672
1512
1734
1737
2212
사용sed, 마지막 awk 명령 다음에 파이핑하여 동일한 명령의 표준 입력을 통해 파일에서 이 줄을 제거할 수 있습니까? 그렇지 않다면 간단한 방법이 있습니까?
답변1
더 쉬운 방법은 다음을 사용하는 것입니다 sed
.
sed '/NA/d' test >test.new
내부 편집을 위해 GNU를 사용하려는 경우 sed
(이렇게 하면 파일이 수정됨 test
):
sed -i '/NA/d' test
이 sed
표현식은 정규 표현식과 일치하는 입력의 모든 행에 명령을 적용합니다 /NA/d
. 이 명령은 행을 삭제합니다.d
NA
d
행 번호가 다음과 같은 경우모두그렇다면 다음도 작동합니다.
some_command | sed 's/$/d/' | sed -f /dev/stdin test >output
여기서 some_command
파일에서 제거하려는 줄 번호를 생성합니다 test
.
첫 번째는 sed
각 줄에 a를 추가하여 숫자 스트림을 스크립트로 변환합니다. 행 읽기는 "행 100 삭제"로 해석됩니다. 그런 다음 이는 실제 스크립트로 두 번째 스크립트(스크립트를 읽는)에 공급되어 파일에 적용됩니다.sed
d
100d
sed
/dev/stdin
test
셸에서 프로세스 대체에 해당하는 내용을 알아보세요.
sed -f <( some_command | sed 's/$/d/' ) test >output
그러나 해당 문자열이 포함된 행만 삭제하려는 경우 NA
이는 어리석은 일입니다 .
답변2
awk
그냥 명령어로 쓰면 너무 지루하지 않을까요?
awk '!/NA/' test
기본 작업은 전체 줄에 대한 것이므로 포함되지 않은 줄을 인쇄하는 것과 같습니다 print
.!/NA/ { print $0 }
NA