6000の列を含む遺伝データファイルがありますgen.gz
。データは次のとおりです。
1 1:13380:C:A 13380 C A
2番目の列を次のように編集したいと思います。
1 1:13380 13380 C A
2列目から4文字を削除したいです。
入力はgen.gz
ファイルであり、出力が同じであることを望みます。
答え1
フィールドが空白文字で区切られていると仮定すると、ファイルを解凍して修正用にインポートし、結果のawk
データを新しいファイル名に圧縮できます。これは、圧縮されていないデータをディスクに保存せずに単一のパイプラインで実行できます。作業が完了したら結果を確認し、正常に見える場合は元の結果を置き換えます。
gzip -d -c gen.gz |
awk '{ sub(":[^:]*:[^:]*$", "", $2); print }' |
gzip -c >new-gen.gz
# look at new-gen.gz, and then
mv new-gen.gz gen.gz # only if you want to discard the original data!
このawk
コードはさまざまな方法で実行できます。:
提案したように、最後の4文字を削除するのではなく、2番目のフィールドから最後の2つの区切り文字列を削除することにしました。常に文字が1つしかない場合は、:[^:]*:[^:]*$
正規表現を次のように記述できます:.:.$
。
圧縮ファイルのデータを変更しているので、ファイルをその場で実際に編集することはできません( のようにsed -i
)。