awk与加入的领域

时间:2014-01-20 18:15:46

标签: regex bash awk

我正在尝试从一个文件中提取数据,基于另一个文件。 来自file1的子字符串用作在file2中查找匹配项的索引。 当要搜索的字符串inf file2中的所有字符串都是空格或隔离的,但是当连接到其他字段时,awk无法找到它。有没有办法让awk匹配file2中字符串的任何部分?

awk -vv1="$Var1" -vv2="$var2" '
    NR==FNR {
        if ($4==v1 && $5==v2) {
            s=substr($0,4,8)
        echo $s 
            a[s]++
        }
        next
    }
    !($1 in a) {
        print
    }' /tmp/file1 /tmp/file2

有效的例子: 文件1:

1  554545352014-01-21      2014-01-21T16:18:01     FS  14001 1         1.10
1  554545362014-01-21      2014-01-21T16:18:08     FS  14002 1         5.50

file2的:

55454535   11       17   102  850Sande Fiambre   1.000
55454536   11       17    17  238Pesc. Dourada   1.000

不起作用的示例:

file2的:

 5545453501/21/20142       1716:18 1   1     116:18
 5545453601/21/20142       1716:18 1   1     216:18

要搜索的字符串,例如:55454535在工作示例中找到匹配项,但它不在底部。

2 个答案:

答案 0 :(得分:2)

您可能想要替换它:

!($1 in a) {
    print
}

这个(或类似的 - 你的要求不清楚):

{
    found = 0
    for (s in a) {
        if ($1 ~ "^"s) {
            found = 1
        }
    }
    if (!found) {
        print
    }
}

答案 1 :(得分:1)

使用正则表达式比较〜而不是==

离。 if($ 4~v1&& $ 5~v2)

如果您希望单词仅以字符串开头,则前缀v1 / v2;如果您希望单词以字母结尾,则前缀为$