【问题标题】:Bash script using "while read" to call two different variables from a fileBash 脚本使用“读取时”从文件中调用两个不同的变量
【发布时间】:2018-07-19 11:54:17
【问题描述】:

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

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

1 rs3131962
3 rs12562034
2 rs4040617
8 rs79373928
2 rs11240779

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

#!/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

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

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

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

完成后,进入第 2 行并执行:

./qctool -g chr3_v3.bgen  -os chr3_rs12562034.bgen -condition-on rs12562034

等等,对于 file.txt 中的所有 ~1000 行

有人可以帮助我获得正确的语法,以便将第 1 列和第 2 列中的变量分别放入我的脚本中吗?

对我的尝试的贫穷表示歉意 - 任何帮助都热烈感谢。

【问题讨论】:

    标签: bash loops while-loop


    【解决方案1】:

    您只需在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 从标准输入读取,因此在done 之后使用&lt; "$filename" 将文件的内容传递到标准输入。

    顺便说一句,我将-r 开关添加到read,因为它不会造成任何伤害,并阻止shell 尝试在它读取的输入中使用\s 做“聪明”的事情。

    【讨论】:

    • Tom Fenech,效果很好。非常感谢您的帮助。
    猜你喜欢
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多