同じファイルの列を比較しようとしています。テーブルは次のとおりです。
G A AA GG CC TT CT
C T CC TT GG GG AA
私が望むのは、最初と2番目の列を残りの列と比較して、最初または2番目の列の一部が含まれていることを確認することです。
このような:
awk '$1 == ^$3 || $2 == ^$3 {print $0}' File.txt
それとも
awk '$1 ~ /$3/ || $2 ~ /$3/ {print $0}' File.txt
しかし、うまくいきません。このタイプの熱間比較をどのように実行できますか?
答え1
あなたの比較は逆です。次の回避策を試してください。
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
答え2
$ 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
2行は失敗し、2行は成功したファイルのテストです。
$ 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 の文字が別の列に表示されると、その行はすぐに印刷され、スクリプトは次の行から続行されます。
答え3
試してみてください(Kusalanandaサンプルから盗んだデータを使用)
awk '{PAT = "[" $1 $2 "]"} gsub (PAT, "&") > 2' file
G A AA GG CC TT CT
C T CC TT GG GG AA
答え4
次の方法を試すことができます。
grep -P '^(\S+) (\S+) .*(\1|\2)' gene.file