次のファイルがあります。
chr1 157784 157887 U6 0 -
chr1 564813 564881 miRNA 0 +
chr1 564879 564950 tRNA 0 -
chr1 564952 565019 tRNA 0 +
chr1 566062 566129 piRNA 0 +
chr1 566137 566205 tRNA 0 -
4列の表現が「piRNA」または「miRNA」で始まらない場合は、「rfam」という単語に置き換えられます。
予想出力:
chr1 157784 157887 rfam 0 -
chr1 564813 564881 miRNA 0 +
chr1 564879 564950 rfam 0 -
chr1 564952 565019 fram 0 +
chr1 566062 566129 piRNA 0 +
chr1 566137 566205 rfam 0 -
注:フィールド4には、U6とtRNAだけでなく、さまざまな名前があります。これはpiRNAまたはmiRNA以外のすべての単語に適用する必要があります。
答え1
awk -v OFS='\t' '$4 !~ /^[pm]iRNA/ { $4 = "rfam" } ; { $4 = $4 ; print }' file
これがまさにあなたが要求したものです。フィールド4が正規表現と一致しない場合は、に^[pm]iRNA
設定してから、rfam
変更したかどうかに関係なくその行を印刷します。
注:一貫した出力を保証するために、出力フィールド区切り記号(OFS)をタブに設定し、印刷ステートメントの$4 = $4
前に追加しました(これにより、出力行のフィールド区切り文字がOFSに変更される副作用があります)。それ以外の場合、変更された行はOFSがデフォルト値(単一スペース)として指定されていますが、変更されていない行は元のファイルの内容と同じままであるため、cat
端末で使用または表示したときに列が正しくソートされない可能性があります。どの。