次のコマンドを使用して、特定の位置で文字列から文字を抽出しています。
left=1; right=4; grep ETM21CH01EPU3Z -A1 SLf_454.fna | tail -n 1 | awk '{print substr($0,1,4)}'
そして、この正しい出力を取得します:
GTTG
ここで、 1と4を bash 変数leftとrightの値に置き換えたいと思います。
私はこれを試しました:
left=1; right=4; grep ETM21CH01EPU3Z -A1 SLf_454.fna | tail -n 1 | awk -v l=$left r=$right '{print substr($0,l,r)}'
awk: cmd. 行:1: 致命的: ファイル `{print substr($0,l,r)}' を読み取り用に開くことができません
何か提案はありますか?ありがとう。
編集:実際に読むことができるように、以下のコメントからコピーしました:
何を検索するか (たとえば ETM21CH01EPU3Z) とその位置が書かれたファイルもあります。したがって、コード全体は次のとおりです。
while read -r line; do
echo $line;
name=`echo $line | cut -d' ' -f 1`;
left=`echo $line | cut -d' ' -f 2`;
right=`echo $line | cut -d' ' -f 3`;
grep $name -A1 SLf_454.fna | tail -n 1 | awk -v l=$left -v r=$right '{print substr($0,l,r)}';
done < CL6o_blastoutput_SLf_454.fna_out