특정 값보다 크거나 같은 열 값을 가진 모든 행을 가져옵니다.

특정 값보다 크거나 같은 열 값을 가진 모든 행을 가져옵니다.

탭으로 구분된 파일의 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보다 큰 값을 추출할 수 있지만 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기본에 익숙해질 때까지.

답변2

나는 당신의 데이터를 다음과 같은 파일에 넣었습니다.data1.txt

마찬가지로 저도 수동으로 수정을 해서 많은 파일을 제작했습니다.

이 코드는 원하는 모든 작업을 수행합니다. 그러나 단일 파일로 출력됩니다.

find . -name "data*.txt" -type f -exec awk 'NR==1 || $6>=0.01' {} + >>output.txt

답변3

주문하다

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

파이썬

#!/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

관련 정보