次のファイルがあります。
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に変更できますtab
。space
これにより、列数を使用する場合の追加処理が容易になります。したがって、以下を使用できますawk
。
awk 'BEGIN { OFS = "\t"; }; { if ($7 ~ "^[0-9]*$") $7 = " "; else $7 = $7; }; 1'
このセクションでは、BEGIN
出力フィールド区切り記号(OFS
)をに変更しますtab
。次のセクションでは、7番目に数字のみが含まれていることを確認し、そうであれば値をに変更しspace
、それ以外の場合は値を保持します。ただし、$7 = $7
変更により現在の行(レコード)を書き換えると確信していますOFS
。フィールド区切り文字()がに設定されている場合、追加の処理OFS
のために出力に8つの列が含まれるように変更されます。awk
FS
tab