【发布时间】:2017-04-08 00:17:57
【问题描述】:
我们以这个文件textfile.txt为例:
foo
bar
foo
bar
foo**word1**bar
foo
bar**word2**foo
foo
foo
bar
foo**word1**bar
foo
foo
bar**word2**foo
foo
foo
bar
foo**word1**bar
foo
bar**word2**foo
foo
bar
foo**word1**bar
foo
bar
foo
bar
bar**word2**foo
foo
我要做的是:在文件中搜索第一个单词,这里的单词是**word1**,如果找到了这个单词,在同一行搜索第二个单词,这里我是**word2**
我尝试使用grep 搜索**word1**,并使用-n 选项来获取行号。然后用这个行号,用sed提取匹配的行和接下来的两个,然后再做一个grep来搜索**word2**。它还应该每次匹配**word1** 和**word2**。
但感觉这不是实现这一目标的最佳方式。
在这个例子中,应该有 3 个正匹配:最后一个不起作用,因为 **word2** 比 **word1** 提前 4 行,我希望最多提前 2 行。
关于 awk 的输出,我想输出两个单词匹配的行号,以及找到它们的相应行。
我还有一个返回输出的 shell 脚本。我想做的是:对于每个匹配的单词,打印"my_script_result" + "awk_result" > file
【问题讨论】:
-
but it doesn't feel like it's the best way to do this是的,awk 会是更好的选择 -
还有你想对匹配的行做什么?只是打印它们还是进一步处理?
-
对不起,我忘了精确:我想做进一步的处理(打印匹配的行、行号和其他信息到文件)。我尝试了 awk,一开始它看起来更简单,但由于我是在 shell 脚本中执行的,所以我没有找到在我的 shell 脚本中使用 awk 结果的正确方法
-
我已投票结束此问题,因为它似乎是请求推荐工具或解决方案,而不是请求帮助您自己的代码。这使您的问题与 StackOverflow 无关。如果该评估不正确,并且您确实需要帮助编写自己的代码,那么请add your work so far to your question,我很乐意撤回我的近距离投票。