【发布时间】:2014-01-20 18:15:45
【问题描述】:
我正在尝试根据另一个文件从一个文件中提取数据。 来自 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
文件2:
55454535 11 17 102 850Sande Fiambre 1.000
55454536 11 17 17 238Pesc. Dourada 1.000
不起作用的例子:
文件2:
5545453501/21/20142 1716:18 1 1 116:18
5545453601/21/20142 1716:18 1 1 216:18
要搜索的字符串,例如:55454535 在工作示例中找到匹配项,但在底部找不到匹配项。
【问题讨论】:
-
鉴于您对 bdrx 的回答的评论,我认为您将需要将您的
in a匹配转换为a和正则表达式~匹配每个项目的循环。 -
从你的 awk 脚本中去掉虚假的 shell 命令
echo $s。 awk 将其视为空变量echo和由变量s中包含的任何数字索引的字段的字符串连接,因此如果s设置为55454535,那么您正在访问字段@987654333 @. -
@Ed Morton,你建议我用什么来代替 echo $s ?
-
您是否要打印 s 的值?然后
print s. -
不,我正在打印 file2 中与 file1 中的子字符串 s 匹配的记录