각 파일에 대해 .sam 파일로 가득 찬 디렉터리가 있는 경우:
column3=blah 및 451000 =<column4 <= 468999인 경우 행을 file_ribos.sam에 씁니다.
그렇지 않으면 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