特定の値以上の列値を持つすべての行を取得します。

特定の値以上の列値を持つすべての行を取得します。

タブ区切りファイルの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

このコードを書くのに役立ちました。しきい値より大きい列値を持つすべての行を取得する、このコードを使用すると、6番目の列から0.01より大きい値を抽出できますが、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

ベストアンサー1

#!/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基本に慣れるまで。

おすすめ記事