Awk

grep 模式並將匹配項保持在同一行

  • February 20, 2020

從樣本輸入:

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

我想獲得樣本輸出,只在同一行保留匹配的單詞。在這種情況下,我想保留 ID* 和 match*

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和多個模式,但匹配也列印在單獨的行上,正如預期的行為

假設您真的不想顯式匹配,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

也試試

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

引用自:https://unix.stackexchange.com/questions/568740