awkを使用して2つの列に基づいてすべての列を取得するには?

awkを使用して2つの列に基づいてすべての列を取得するには?

次のファイルがあります。

sample  chr        start      end      ref   alt    gene    effect
AADA-01 chr1    12336579    12336579    C    T     VPS13D    Silent
AADA-02 chr1    20009838    20009838    -   CCA    TMCO4    Missense
AADA-03 chr1    76397825    76397825    GTCA T     ASB17    Missense
AADA-03 chr1    94548954    94548954    C    A     ABCA4    Missense
AADA-04 chr1    176762782   176762782   TCG  C     PAPPA2   Missense
AADA-04 chr1    183942764   183942764   -    T     COLGAL   Missense
AADA-05 chr1    186076063   186076063   A    TGC   HMCN1    Silent
AADA-05 chr1    186076063   186076063   A    T     HM1      Silent

5番目と6番目の列には1文字だけを含むすべての行が必要です。

結果は次のようになります。

sample  chr        start      end      ref   alt    gene    effect
AADA-01 chr1    12336579    12336579    C    T     VPS13D    Silent
AADA-03 chr1    94548954    94548954    C    A     ABCA4    Missense
AADA-05 chr1    186076063   186076063   A    T     HM1      Silent

私はこれを使用しようとしています。

awk -F'\t' '$5' filename | awk -F'\t' '$6' filename | wc -l

私はこれが間違っていることを知っていますが、誰かが私を訂正できますか?

ベストアンサー1

awk 'NR==1{print; next}
     $5 ~ /^[A-Z]$/ && $6 ~ /^[A-Z]$/' input.txt

説明する

NR==1{print; next}

これにより、無条件に最初の行(ヘッダー)が印刷され、次の行に移動します。

$5 ~ /^[A-Z]$/ && $6 ~ /^[A-Z]$/

これは条件式です。 5番目と6番目の引数の両方が大文字と一致する場合は、その行を印刷します(この場合、印刷コマンドは暗黙的であり、すべての条件のデフォルトコマンドです)。

$5$6各行の5番目と6番目の列を表します。

&&論理演算子AND。

~正規表現一致演算子です。左側のパラメータが右側の正規表現と一致する場合はtrueを返します。

/^[A-Z]$/正規表現(regexp)です。文字「/」は正規表現の区切り文字、「^」は行(または文字列)の始まりを表し、「$」は終わりを表し、「[AZ]」はAからZまでのすべての大文字を表します。

おすすめ記事