各ファイルに.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