awk 파일 디렉토리

awk 파일 디렉토리

각 파일에 대해 .sam 파일로 가득 찬 디렉터리가 있는 경우:

  1. column3=blah 및 451000 =<column4 <= 468999인 경우 행을 file_ribos.sam에 씁니다.

  2. 그렇지 않으면 file_non_ribos.sam에 줄을 씁니다.

입력 예

# file_1.sam    
abc  123  blah  451200
abc  123  blah  450999

예제 출력

# file_1_ribos.sam
abc  123  blah  451200

# file_1_non_ribos.sam
abc  123  blah  450999

내 코드가 실패한 것 같습니다. 내가 뭘 잘못했나요?

for file in *.sam ; do
  awk -F"\t" '
   {if($3 == "blah" && $4 >= "451000" && $4 <= "468999") {
     {print $0} > "$(basename "$file" .sam)_ribos.sam";}
    else {print $0} > "$(basename "$file" .sam)_non_ribos.sam";}
  ' $file;
done

답변1

코드를 조금 리팩터링했습니다 ...

for file in *.sam ; do
  awk -v basename="$(basename $file .sam)" '
    { non = ($3 == "blah" && $4 >= 451000 && $4 <= 468999) ? "" : "_non"
      outfile = basename non "_ribos.sam"
      print > outfile
    }
  ' "$file"
done

관련 정보