我的文件列表如下:
12as.pdb
132l.pdb
135l.pdb
13pk.pdb
我有这样的命令:
awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' file1 file2
我想编写一个循环bash,如下所示成对生成此命令:
awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 132l.pdb
awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 135l.pdb
awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 13pk.pdb
任何人都可以写这个bash脚本并帮助我吗?
答案 0 :(得分:1)
以下是一个脚本示例,您可以将其作为一个启动程序,让我知道它是如何进行的。由于您还没有让我们了解有关示例Input_file和输出的大量信息,因此根据您的问题,这里是答案,尽管多次创建awks我们可以为它创建一个函数。
#!/bin/bash
CHECK (){
awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' "$1" "$2"
}
CHECK 12as.pdb 132l.pdb
CHECK 12as.pdb 135l.pdb
CHECK 12as.pdb 13pk.pdb
因此逻辑是创建一个函数put awk
代码并将文件名作为参数传递给它,并使用您想要传递的不同文件名调用该函数。
答案 1 :(得分:0)
因为只有你的第二个文件是bash循环中的变量
for f in {1321,1351,13pk}.pdb;
do
awk '....' 12as.pdb $f;
done
还在awk
脚本中将[$1$2]
改为[$1,$2]
和$1$2 in a
改为($1,$2) in a
,除非您知道自己在做什么