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

関連情報