각 열에 NA가 포함된 행을 삭제합니다.

각 열에 NA가 포함된 행을 삭제합니다.

다음과 같이 탭으로 구분된 파일이 있습니다.

gene    v1  v2  v3  v4
g1  NA  NA  NA  NA
g2  NA  NA  2   3
g3  NA  NA  NA  NA
g4  1   2   3   2

행당 필드 수는 고정되어 동일합니다. 위 파일에서 2열부터 마지막 ​​열까지 각 행의 모든 ​​필드가 NA인 행을 제거하고 싶습니다. 그러면 출력은 다음과 같아야 합니다.

gene    v1  v2  v3  v4
g2  NA  NA  2   3
g4  1   2   3   2 

답변1

그리고 awk:

awk '{ for (i=2;i<=NF;i++) if ($i!="NA"){ print; break } }' file

두 번째 필드부터 시작하여 필드를 반복하고 NA포함되지 않은 필드가 발견되면 해당 행을 인쇄합니다. 그런 다음주기를 끊으십시오.

답변2

GNU sed 사용

sed -e '/g[0-9]\+\(\s*NA\s*\)\+$/d' filename

간단한 설명:

g[0-9]\+\(\s*NA\s*\)\+$정규식 일치 항목은 줄 끝까지 g적어도 하나의 숫자와 그 사이에 선택적인 공백이 있는 임의의 수의 s가 뒤따르는 정규식 일치입니다 .NA

sed -e '/<regex>/d'일치하는 모든 줄 삭제<regex>

동일한 의미를 갖는 보다 표준적인 정규식은 다음과 같습니다.

sed -Ee '/g[0-9]+([[:space:]]*NA[[:space:]]*)+$/d' filename

답변3

allPerl List::Util 모듈 에서 :

$ perl -MList::Util=all -alne 'shift @F; print unless all { $_ eq "NA" } @F' file
gene  v1  v2  v3  v4
g2    NA  NA  2   3
g4    1   2   3   2

답변4

당신은 시도 할 수 있습니다:

$ grep -P '\t(?!NA(\t|$))' file

$ sed -e 'h;s/\tNA//g;/\t/!d;g' file

$ perl -MList::MoreUtils=any -F'\t' -lane 'print if any { ! /^NA$/ } @F[1..$#F]' file 

관련 정보