grep 패턴을 사용하고 같은 줄에 일치 항목을 유지합니다.

grep 패턴을 사용하고 같은 줄에 일치 항목을 유지합니다.

샘플 입력에서:

cat file.txt
ID1    sample1    sample2    match1    sample3
ID2    sample4    match2     matchABC   

같은 줄에 일치하는 단어만 유지하는 샘플 출력을 얻고 싶습니다. 이 경우 ID*와 일치 항목*을 유지하고 싶습니다.

cat file.txt
ID1    match1
ID2    match2     matchABC  

내가 시도한 것들:

cat file.txt | awk '{for(i=1;i<=NF;i++){if($i~/^match|ID/){print $i}}}'

원하는 일치 항목을 얻었지만 올바른 형식이 아닙니다(출력에서 모두 별도의 줄에 표시됨). 옵션과 여러 패턴으로 grep을 시도했지만 -o일치 항목도 아래와 같이 별도의 줄에 인쇄됩니다.예상되는 동작.

답변1

명시적으로 일치시키고 싶지는 않지만 ID다른 필드가 일치하면 첫 번째 필드만 인쇄되기를 원한다고 가정합니다 match.

$ awk '{c=0; for (i=2;i<=NF;i++) if ($i ~ /^match/) printf "%s%s%s", (c++ ? "" : $1), OFS, $i} c{print ""}' file
ID1 match1
ID2 match2 matchABC

답변2

또한 시도

awk '{for (i=1; i<=NF; i++) if ($i !~ /match|ID/) $i=""} 1' file1
ID1   match1 
ID2  match2 matchABC

관련 정보