从一个文件的列中获取输入,并匹配第二个文件中的两列条件

时间:2016-02-03 08:06:27

标签: shell awk command-line grep

我有两个这样的文件:

文件1:

AppTheme

文件2:

1   1987969 1987970 .   7.078307    33
1   2066715 2066716 .   7.426998    34
1   2066774 2066775 .   6.851217    33

我想获取文件1中第3列的每个值,并使用类似(1 HANASAI gelliu 1186928 1441229 1 FEBRUCA sepaca 3455487 3608150 )的条件在文件2中搜索,然后在新文件中打印整行文件2。

还有一件事也很重要:要在file_2中搜索file_1中的每个变量,column_1中的相应值应该在两个文件中都相同,例如对于file_1的'1987970',column_1中对应的值为'1',因此在file_2中,第一列中的值也应为'1'。

由于

1 个答案:

答案 0 :(得分:2)

编辑:仅考虑匹配" class"第1栏中的值

$ cat msh.awk
# Save all the pairs of class and third-column values from file1
NR==FNR { a[$1,$3]; next }

# For each line of file2, if there exists a third-column-file1
# value between the values of columns 4 and 5 in a record of the
# same class, print the line
{
    for (cv in a) {
        split(cv, class_val, SUBSEP);
        c = class_val[1];
        v = class_val[2];
        if (c == $1 && v >= $4 && v <= $5) {
            print
            break
        }
    }
}

$ cat file1
1   1987969 1987970 .   7.078307    33
1   2066715 2066716 .   7.426998    34
1   2066774 1200000 .   6.851217    33
1   2066774 2066775 .   6.851217    33

$ cat file2
1   HANASAI gelliu  1186928 1441229
1   FEBRUCA sepaca  3455487 3608150

$ awk -f msh.awk file1 file2
1   HANASAI gelliu  1186928 1441229