【发布时间】:2013-01-29 14:41:28
【问题描述】:
我正在使用这个命令从字符串的某些位置提取字符:
left=1; right=4; grep ETM21CH01EPU3Z -A1 SLf_454.fna | tail -n 1 | awk '{print substr($0,1,4)}'
并获得正确的输出:
GTTG
现在我想用 bash 变量 left 和 right 中的值替换 1 和 4。
我试过这个:
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:命令。 line: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
【问题讨论】:
标签: bash awk character extract