Linux
如果一列與另一列部分匹配,則匹配
我正在嘗試比較同一文件的列。該表如下所示:
G A AA GG CC TT CT C T CC TT GG GG AA
我想要做的是將第一列和第二列與其餘列進行比較,看看它們是否包含第一列或第二列的一部分。
像這樣的東西:
awk '$1 == ^$3 || $2 == ^$3 {print $0}' File.txt
或者像這樣
awk '$1 ~ /$3/ || $2 ~ /$3/ {print $0}' File.txt
但不工作。如何在列之間進行此類比較?
你的比較倒過來了。請嘗試以下替代方案:
awk '$3 ~ $1 || $3 ~ $2 { print }' inputfile awk 'match( $3, $1 ) || match( $3, $2 ) { print }' inputfile
在您的範常式式碼中,您嘗試
$1 ~ $3
將其擴展為C ~ /CC/
(表達式是否/CC/
與字元串匹配C
?)而不是CC ~ /C/
(表達式是否/C/
與字元串匹配CC
?)。
$ awk '{ for (i=3; i<=NF; ++i) if (match($i,$1) || match($i,$2)) { print; next } }' file G A AA GG CC TT CT C T CC TT GG GG AA
對一個文件進行測試,其中我們測試兩行失敗,兩行成功:
$ cat file G A AA GG CC TT CT C T AG AA GG GG AA G C AA AA TT TT AT C T CC TT GG GG AA $ awk '{ for (i=3; i<=NF; ++i) if (match($i,$1) || match($i,$2)) { print; next } }' file G A AA GG CC TT CT C T CC TT GG GG AA
腳本從第
awk
3 列開始遍歷所有列,並將每列與第 1 列和第 2 列進行比較。如果第 1 列或第 2 列中的字元出現在任何其他列中,則立即列印該行並且腳本繼續下一行.