次の名前のファイル(22)がいくつかあります。
chr1.out、chr2.out...、chr22.out
各ファイルには46の列と複数の行があります。
ファイルの1つの最初の6列と6行は次のとおりです。
alternate_ids rsid chromosome position alleleA alleleB index
rs4814683 rs4814683 NA 9795 G T 1
rs6076506 rs6076506 NA 11231 T G 2
rs6139074 rs6139074 NA 11244 A C 3
rs1418258 rs1418258 NA 11799 C T 4
rs7274499 rs7274499 NA 12150 C A 5
rs6116610 rs6116610 NA 12934 G A 6
これがchr1.outファイルにあるとします。
私が望むのは、熱染色体のすべてのNAを1に置き換えることです。
したがって、次のようになります。
alternate_ids rsid chromosome position alleleA alleleB index
rs4814683 rs4814683 1 9795 G T 1
rs6076506 rs6076506 1 11231 T G 2
rs6139074 rs6139074 1 11244 A C 3
rs1418258 rs1418258 1 11799 C T 4
rs7274499 rs7274499 1 12150 C A 5
rs6116610 rs6116610 1 12934 G A 6
22個のファイルごとに同じことをしたいと思います。したがって、chr2.outは3番目の列で2を取得し、chr3.outは3番目の列で3を取得します。
ベストアンサー1
Bashスクリプトを使用してください。
#!/bin/bash
tmp_d=$(mktemp -q -d -t 'replace.XXXXX' || mktemp -q -d)
for f in chr*.out; do
tmp_f="${tmp_d}/$f"
n="${f#chr}"
n="${n%.out}"
awk -v n="$n" '$3 == "NA" { $3=n }1' "$f" > "$tmp_f"
mv "$tmp_f" "$f"
done
rm -r "$tmp_d"
まず、tmpファイルを作成するので、tmpディレクトリを作成します。
その後、各ファイルを繰り返しますchr*.out
。
- tmpディレクトリにこのファイルの変数を作成します。
chr
プレフィックスの削除.out
サフィックスの削除awk
次に、NA
3番目の列の内容をファイル名から抽出した数字に置き換え、それをtmpファイルに保存します。- 元のファイルをtmpファイルに置き換える
ループが完了したら、tmpディレクトリを削除します。
-i
GAWKがあり、内部オプションが利用可能な場合は、すべてのtmpエントリを回避できます。