【发布时间】:2015-07-07 19:19:24
【问题描述】:
对不起,我从来没有在这样的板上问过问题,请原谅没有经验。
我正在尝试从输入文件中获取一个字段,例如来自 abc.txt 的字段二,并在 def.txt 中匹配它。问题是我还需要匹配 def.txt 文件中的附加模式。
例如,abc.txt 中的字段 2 为“3”。我想在 def.txt 中搜索的模式是“efg”。我需要它返回匹配模式“efg”并包含“3”的所有行。
作为一个附加约束,我希望它在达到某个值后停止搜索,比如“END”。我已经竭尽全力在 awk 或任何变体中为此找到一个简单的衬里。
我对所有这些问题都感到困惑,作为新手可以寻求帮助吗?任何帮助表示赞赏,谢谢。
这是代码,它根本不起作用:
awk 'BEGIN { FS = " " } ;NR==FNR{a[$2]=++i;next} '{if ( $5 in a) && ($0 ~ '/efg/')} {print $0}' abc.txt def.txt
我正在努力实现 3 件事:
将输入文件字段与 def.txt 字段匹配
匹配 def.txt 中的模式
遇到值时停止搜索,例如“END”。
如果可能的话,希望有一个单一的解决方案,我只是一个 AWK 初学者。
Sample Input
Abc.txt
1
2
3
4
Def.txt
1 abc
1 efg
1 efg some more data
END
2 ghi
2 efg
2 efg some more data
END
3 jkl
3 efg
3 efg some more data
END
等等……
Expected Output
1 efg
1 efg some more data
2 efg
2 efg some more data
3 efg
3 efg some more data
并在任何帮助下让它在到达“END”时停止。而不是遍历整个文件并打印 1 efg、2 efg 等的后续实例。
【问题讨论】:
-
abc.txt 中的“3” 匹配 def.txt 中的“efg” 和两个文件中的打印行?这两个文件都是空格分隔的吗?哪个文件包含“END”?
-
你想用
'/efg'/完成什么?无论如何,发布一些示例输入和预期输出。 -
@haifzhan - 我需要该行的文件在 def.txt 中。我正在寻找 def.txt 中与 abc.txt 中的“3”和 def.txt 中的“efg”匹配的行。 “END”语句也在我需要从中获取结果的文件中。抱歉没有详细说明,我正在学习如何有效地发帖。