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}}}'

我得到了想要的匹配,但格式不正确(它们都在输出的单独行中)。我尝试使用选项-o和多个模式进行 grep 但匹配项也打印在单独的行上,如下所示预期行为

答案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

相关内容