awkを使用して列からシンボルを削除する方法

awkを使用して列からシンボルを削除する方法

次のデータがあります。

chr1    134901  139379  -   "ENSG00000237683.5";
chr1    860260  879955  +   "ENSG00000187634.6";
chr1    861264  866445  -   "ENSG00000268179.1";
chr1    879584  894689  -   "ENSG00000188976.6";
chr1    895967  901095  +   "ENSG00000187961.9";

GTFファイルを解析して作成しました。

可能であれば、awkまたはsedを使用して5列の合計を削除したいと思います";結果は次のとおりです。

chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

答え1

使用gsub:

awk '{gsub(/\"|\;/,"")}1' file
chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

走りたいならただ5番目のフィールドは、他のフィールドに引用符またはセミコロンを保持します。

awk '{gsub(/\"|\;/,"",$5)}1' file 

答え2

データが示されているとおりに正しくフォーマットされている場合(つまり、他の項目";他の列を保存する必要がない場合)、次のようにtr文字を削除することができます。

tr -d '";' < input.txt > output.txt

答え3

sed を使用して '';'' のすべてのインスタンスを削除します。 sed -i 's/[";]//g' file

5番目の列からsedを削除するだけでは最善の選択肢ではないかもしれません。

答え4

sedソリューション、5番目の列のみを扱うようにします。

sed -E 's/^(([^ ]+ +){4})"([^"]+)";$/\1\3/' infile
chr1    134901  139379  -   ENSG00000237683.5
chr1    860260  879955  +   ENSG00000187634.6
chr1    861264  866445  -   ENSG00000268179.1
chr1    879584  894689  -   ENSG00000188976.6
chr1    895967  901095  +   ENSG00000187961.9

これはERE(-Eまたは-r一部の古いsed)なしで機能しますが、より多くのバックスラッシュが必要です。 POSIX仕様1+によれば、定量子はERE専用であり、BREで置き換え(または使用)することができます。{1,}\{1,\}

列がスペースで区切られていない場合は、スペースをPOSIX文字クラスに置き換えて、[:blank:]タブ文字と一致させることもできます。

正規表現の詳細:

^               # Anchored at start of line
(               # Capture group 1 for first 4 columns
    (           # Capture group 2 for repeat count
        [^ ]+   # 1 or more non-spaces
         +      # 1 or more spaces
    ){4}        # 4 times "word plus spaces" (columns)
)               # End capture group 1
"               # Column 5 starts with double quote (not captured)
(               # Capture group 3 for column 5
    [^"]+       # One or more non-quote characters
)               # End capture group 3
";              # Quote and semicolon at end of column 5
$               # Anchored at end of line

1 GNU sed は\+BRE でも拡張として許可されます。

関連情報