タブ区切りファイルの列番号6から0.01以上の値を抽出する必要があります(私のファイルには6列以上が含まれています)。私は次のコードで試しました
for i in $(find ./ `pwd` -name "BC_4_*_*shift.txt" ); do
awk -F"\t" 'NR==1 || $6>=0.01' $i > $i"_"ctdna_freq.txt;
done
このコードを書くために私は助けを借りました しきい値より大きい列値を持つすべての行を取得します 、このコードを使用して、0.01より大きい6番目の列から値を抽出できますが、できません0.01に等しい値を抽出します。以下は入力ファイルです。
chr pos ref var p.val freq.var
chr19 9074573 A C 6.73E-22 0.586593469
chr19 9091288 G T 5.96E-188 0.508732726
chr8 124518636 C T 9.55E-21 0.00005
chr12 56490398 G T 0.005271732 0.010003218
chr12 56477619 G A 1.40E-15 0.010001069
chr12 56477619 G A 1.40E-15 0.010001069
chr3 52677261 C T 5.13E-06 0.01
chr5 67591010 A G 4.82E-23 0.01
期待される出力
chr pos ref var p.val freq.var
chr19 9074573 A C 6.73E-22 0.586593469
chr19 9091288 G T 5.96E-188 0.508732726
chr12 56490398 G T 0.005271732 0.010003218
chr12 56477619 G A 1.40E-15 0.010001069
chr12 56477619 G A 1.40E-15 0.010001069
chr3 52677261 C T 5.13E-06 0.01
chr5 67591010 A G 4.82E-23 0.01
#!/usr/bin/env bash
while IFS= read -r i; do
awk -F'\t' 'NR==1 || $6>=0.01' "$i" > "${i}_ctdna_freq.txt"
done < <(find . -name 'BC_4_*_*shift.txt')
または:
#!/usr/bin/env bash
find . -name 'BC_4_*_*shift.txt' |
xargs -n 1 -I {} awk -F'\t' 'NR==1 || $6>=0.01' "{}" > "{}_ctdna_freq.txt"
しないでくださいfor i in ...
、 https://mywiki.wooledge.org/BashFAQ/001 を参照してください。常に変数を引用してください。 https://mywiki.wooledge.org/Quotes を参照してください。 =。基本に慣れるまで、すべてのシェルスクリプトを http://shellcheck.net で実行します。
私はあなたのデータをdata1.txt
として知られているファイルに入れました
同様に、私は手動で変更を加え、多くのファイルを作成しました。
このコードは、必要なことをすべて実行します。ただし、1つのファイルに出力されます。
find . -name "data*.txt" -type f -exec awk 'NR==1 || $6>=0.01' {} + >>output.txt
コマンド
awk '$6 >= 0.01' file.txt
出力
chr pos ref var p.val freq.var
chr19 9074573 A C 6.73E-22 0.586593469
chr19 9091288 G T 5.96E-188 0.508732726
chr12 56490398 G T 0.005271732 0.010003218
chr12 56477619 G A 1.40E-15 0.010001069
chr12 56477619 G A 1.40E-15 0.010001069
chr3 52677261 C T 5.13E-06 0.01
chr5 67591010 A G 4.82E-23 0.01
Python
#!/usr/bin/python
k=open('file.txt','r')
k.readline()
print ("chr pos ref var p.val freq.var")
for i in k:
q=i.split(' ')[-1]
if (float(q) >= 0.01):
print (i.strip())
output
chr pos ref var p.val freq.var
chr19 9074573 A C 6.73E-22 0.586593469
chr19 9091288 G T 5.96E-188 0.508732726
chr12 56490398 G T 0.005271732 0.010003218
chr12 56477619 G A 1.40E-15 0.010001069
chr12 56477619 G A 1.40E-15 0.010001069
chr3 52677261 C T 5.13E-06 0.01
chr5 67591010 A G 4.82E-23 0.01