ある列が別の列と部分的に一致する場合

ある列が別の列と部分的に一致する場合

同じファイルの列を比較しようとしています。テーブルは次のとおりです。

  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/CCC ~ /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

関連情報