다음과 같은 파일이 있습니다. 첫 번째 줄은 제목입니다.
"variant_id" "hg38_chr" "hg38_pos" "ref_allele" "alt_allele" "hg19_chr" "hg19_pos"
"chr10_100000235_C_T_b38" "chr10" "100000235" "C" "T" "chr10" 101759992
"chr10_100002628_A_C_b38" "chr10" "100002628" "A" "C" "chr10"
"chr10_100004827_A_C_b38" "chr10" "100004827" "A" "C" "chr10" 101764584
"chr10_100005358_G_C_b38" "chr10" "100005358" "G" "C" "chr10" 101765115
"chr10_100005711_G_A_b38" "chr10" "100005711" "G" "A" "chr10" 101765468
"chr10_100006780_C_T_b38" "chr10" "100006780" "C" "T" "chr10" 101766537
"chr10_100007241_C_T_b38" "chr10" "100007241" "C" "T" "chr10" 101766998
"chr10_100008640_A_G_b38" "chr10" "100008640" "A" "G" "chr10"
"chr10_100009013_G_A_b38" "chr10" "100009013" "G" "A" "chr10" 101768770
마지막 열의 빈 필드를 식별하는 방법은 무엇입니까? 다음 명령을 시도했습니다.
awk '$7==" "' file.txt > blanks.txt
awk '{if($7==" ") print}' file.txt > blanks.txt
둘 다 빈 파일을 제공합니다.
Blanks.txt의 결과는 다음과 같아야 합니다.
"chr10_100002628_A_C_b38" "chr10" "100002628" "A" "C" "chr10"
"chr10_100008640_A_G_b38" "chr10" "100008640" "A" "G" "chr10"
답변1
이 답변에 대한 마지막 대안은 허용되는 사항에 대해 더 엄격하며 탭 및/또는 공백으로 구분된 필드와 무관합니다.
하지만 먼저:
마지막 필드가 비어 있으면 필드가 6개만 있습니다(공백이나 탭으로 구분된 경우). 이 줄을 인쇄하려면 다음과 같이 하세요.
$ awk ' NF<7 {print}' infile
"chr10_100002628_A_C_b38" "chr10" "100002628" "A" "C" "chr10"
"chr10_100008640_A_G_b38" "chr10" "100008640" "A" "G" "chr10"
{print}
awk는 기본적으로 true이고 다음 해결 방법에서 제거될 표현식을 인쇄하므로 이 명령은 실제로 필요하지 않습니다.펠릭스 JN).
헤더도 필요한 경우 다음을 추가하세요.
$ awk '(NF<7) || (NR==1)' infile
"variant_id" "hg38_chr" "hg38_pos" "ref_allele" "alt_allele" "hg19_chr" "hg19_pos"
"chr10_100002628_A_C_b38" "chr10" "100002628" "A" "C" "chr10"
"chr10_100008640_A_G_b38" "chr10" "100008640" "A" "G" "chr10"
충분한 필드가 포함된 행을 유지하려면 다음을 수행하세요.
$ awk '(NF>=7) || (NR==1)' infile
"variant_id" "hg38_chr" "hg38_pos" "ref_allele" "alt_allele" "hg19_chr" "hg19_pos"
"chr10_100000235_C_T_b38" "chr10" "100000235" "C" "T" "chr10" 101759992
"chr10_100004827_A_C_b38" "chr10" "100004827" "A" "C" "chr10" 101764584
"chr10_100005358_G_C_b38" "chr10" "100005358" "G" "C" "chr10" 101765115
"chr10_100005711_G_A_b38" "chr10" "100005711" "G" "A" "chr10" 101765468
"chr10_100006780_C_T_b38" "chr10" "100006780" "C" "T" "chr10" 101766537
"chr10_100007241_C_T_b38" "chr10" "100007241" "C" "T" "chr10" 101766998
"chr10_100009013_G_A_b38" "chr10" "100009013" "G" "A" "chr10" 101768770
마지막 파일이 누락되었다는 사실에 의존하지 않고 대신 줄 끝에 후행 숫자가 있는지 확인하는 솔루션이 필요한 경우 다음을 사용하세요.
$ awk '/[0-9]+[ \t]*$/ || (NR==1)' infile
"variant_id" "hg38_chr" "hg38_pos" "ref_allele" "alt_allele" "hg19_chr" "hg19_pos"
"chr10_100000235_C_T_b38" "chr10" "100000235" "C" "T" "chr10" 101759992
"chr10_100004827_A_C_b38" "chr10" "100004827" "A" "C" "chr10" 101764584
"chr10_100005358_G_C_b38" "chr10" "100005358" "G" "C" "chr10" 101765115
"chr10_100005711_G_A_b38" "chr10" "100005711" "G" "A" "chr10" 101765468
"chr10_100006780_C_T_b38" "chr10" "100006780" "C" "T" "chr10" 101766537
"chr10_100007241_C_T_b38" "chr10" "100007241" "C" "T" "chr10" 101766998
"chr10 100009013_G_A_b38" "chr10" "100009013" "G" "A" "chr10" 101768770
"chr10 100009013 G_A_b38" "chr10" "100009013" "G" "A" "chr10" 101768770
"chr10_100009013_G_A_b38" "chr10" "100009013" "G" "A" "chr10" 101768770
이는 다른 필드가 없어도 영향을 받지 않으며 사용되는 필드 구분 기호(공백 및/또는 탭)와 무관합니다.
마지막 필드가 숫자라고 가정아니요큰따옴표로 묶여 있지만 필요한 경우 쉽게 변경할 수 있습니다.
그리고 귀하의 질문에서 요청한 출력을 엄격하게 준수하려면 다음을 수행하십시오.
$ awk '!/[0-9]+[ \t]*$/ && NR>1' infile
"chr10_100002628_A_C_b38" "chr10" "100002628" "A" "C" "chr10"
"chr10_100008640_A_G_b38" "chr10" "100008640" "A" "G" "chr10"