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

おすすめ記事