数値を含む列の値を変更する

数値を含む列の値を変更する

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

chrom   start   stop    strand  isoform mu_codon    mut_codon2  more_info
chr22   43089055    43089055    -   NM_017436   C   300 903delC
chr22   43089715    43089717    -   NM_017436   CTT 79  241_243delTTC
chr12   53701873    53701875    -   NM_015665   TTC A   1292_1294delTTCinsA

7番目の列の値に文字以外の数字が含まれている場合は、スペースに置き換えたいと思います。

たとえば、私が望む結果は次のとおりです。

chrom   start   stop    strand  isoform mu_codon    mut_codon2  more_info
chr22   43089055    43089055    -   NM_017436   C       903delC
chr22   43089715    43089717    -   NM_017436   CTT     241_243delTTC
chr12   53701873    53701875    -   NM_015665   TTC A   1292_1294delTTCinsA

列が変更されないように、ファイルのスペースを保存する必要があります。これを行う方法についてのアイデアはありますか?おそらくawk?私はまだこれらのスキルを学んでいます。答えを説明してもらえますか?

ベストアンサー1

たとえば、列を保存したい場合は、出力フィールドの区切り文字をnon-delimitedに変更できますtabspaceこれにより、列数を使用する場合の追加処理が容易になります。したがって、以下を使用できますawk

awk 'BEGIN { OFS = "\t"; }; { if ($7 ~ "^[0-9]*$") $7 = " "; else $7 = $7; }; 1'

このセクションでは、BEGIN出力フィールド区切り記号(OFS)をに変更しますtab。次のセクションでは、7番目に数字のみが含まれていることを確認し、そうであれば値をに変更しspace、それ以外の場合は値を保持します。ただし、$7 = $7変更により現在の行(レコード)を書き換えると確信していますOFS。フィールド区切り文字()がに設定されている場合、追加の処理OFSのために出力に8つの列が含まれるように変更されます。awkFStab

おすすめ記事