샘플 입력에서:
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