awk命令循环

时间:2017-10-31 11:59:49

标签: awk

我的文件列表如下:

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脚本并帮助我吗?

2 个答案:

答案 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,除非您知道自己在做什么