Bash脚本使用“读取时”从文件中调用两个不同的变量

时间:2018-07-19 11:54:17

标签: bash loops while-loop

感谢您的帮助。我相信我需要使用“边读边读”来实现我希望在这里实现的目标。我曾在论坛中寻找过类似的问题,但找不到一个示例,其中从另一个文件调用了多个变量。

我有file.txt,它有两列,长约1000行,看起来像这样:

    Thread backgroundThread2 = new Thread() {
        @Override
        public void run() {
            // Do stuff in background
        }
    };
    backgroundThread2.start();

我想编写一个脚本,对于file.txt的每一行,将从第1列和第2列中获取变量并将其放在命令的不同部分。现在,我知道此语法是完全错误的,但是出于说明目的,我希望它看起来像:

1 rs3131962
3 rs12562034
2 rs4040617
8 rs79373928
2 rs11240779

..其中$ 1和$ 2代表file.txt中每一行的第一和第二列中的变量。

基本上,我希望它读取file.txt的第1行并执行:

#!/bin/bash
filename='file.txt'
while read file.txt;
do 
./qctool -g chr"$1"_v3.bgen  -os chr"$1"_"$2".bgen -condition-on "$2"
done

完成后,移至第二行并执行:

./qctool -g chr1_v3.bgen  -os chr1_rs3131962.bgen -condition-on rs3131962

依次类推,适用于file.txt中的所有〜1000行

有人可以帮助我正确使用语法,以将第1列和第2列中的变量分别添加到脚本中吗?

为我的尝试感到贫穷而深表歉意-任何帮助都会受到感激。

1 个答案:

答案 0 :(得分:2)

您只需要在read命令中命名变量:

#!/bin/bash
filename='file.txt'
while read -r first second
do 
./qctool -g chr"$first"_v3.bgen  -os chr"$first"_"$second".bgen -condition-on "$second"
done < "$filename"

此外,read从标准输入读取,因此在< "$filename"之后使用done在标准输入上传递文件的内容。

顺便说一句,我在-r上添加了read开关,因为它没有害处,并且停止了shell尝试在其输入中使用\进行“巧妙”操作阅读。