我正在尝试从一个文件中提取数据,基于另一个文件。 来自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在工作示例中找到匹配项,但它不在底部。
答案 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;如果您希望单词以字母结尾,则前缀为$