感谢您的帮助。我相信我需要使用“边读边读”来实现我希望在这里实现的目标。我曾在论坛中寻找过类似的问题,但找不到一个示例,其中从另一个文件调用了多个变量。
我有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列中的变量分别添加到脚本中吗?
为我的尝试感到贫穷而深表歉意-任何帮助都会受到感激。
答案 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尝试在其输入中使用\
进行“巧妙”操作阅读。