将列分配给外壳中的变量

时间:2018-10-17 05:53:29

标签: shell loops variables unix multiple-columns

我有这个文件:

NC_003037.1     453555  454448
NC_007493.2     2279220 2278345
NC_007952.1     1763831 1762950
NC_005791.1     844089  844916

我想遍历每一行以获得变量“ id”,“ column1”,“ column2”,我将在此命令中使用该变量:

efetch -db nuccore -id $id -chr_start $column1 -chr_stop $column2 -format fasta > file.txt

您能在Shell脚本中为我提供一种方法吗?

2 个答案:

答案 0 :(得分:0)

看到多列时,请考虑awk

rm -f file.txt ; cat inputfile.txt | \
awk '{ print "efetch -db nuccore -id "$1" -chr_start "$2" -chr_stop "$3" -format fasta" }' | \
while read cmd; do $cmd >> file.txt; done

(编辑:将重定向移动到执行中)

awk组成命令,然后while read cmd ...; done执行它。

答案 1 :(得分:0)

使用read循环:

while read -r id column1 column2; do
  efetch -db nuccore -id "$id" -chr_start "$column1" -chr_stop "$column2" -format fasta
done < file.input > file.txt
  • 重要的是在变量扩展名前后使用双引号,以防止单词分裂和混乱
  • 在循环结束时放入> file.txt,以提高I / O效率

相关: