提取特定单词后出现的单词

时间:2017-04-23 10:21:59

标签: bash unix awk grep

我对linux很新,需要从this text.

中提取“你的”这个词之后出现的所有单词

我尝试使用以下命令执行此操作:

 awk '{for(i=0;i<=NF;i++) if ($i=="thy") print $(i+1)}' pg1120.txt

但结果输出似乎是错误的。例如,'thy'后出现3次'master'一词,但我的代码只检测到两次出现。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

一种方法是用\n替换所有空格并使用grep

$ cat pg1120.txt | tr -s \  '\n' | grep -i -x -A 1 thy
thy
leather
--
thy
rule?
...

这会提取匹配,其中thy是记录的最后一个单词。 thy可以是正则表现更好,因为它现在也匹配部分匹配(worthy等) - 或-x grep切换p,由Mr.先生提供@RobertSeaman,谢谢先生。

使用awk从前一条记录中获取你的信息。将之前的字词存储到$ cat > test thy master thy. Master thy master 并将其与当前字词进行比较。第一个测试材料:

$ awk '{for(i=1;i<=NF;i++){if(p=="thy")print $i;p=tolower($i)}}' test
master
master

代码:

p

由于thy. != thy:添加,因此也应从gsub(/[^[:alpha:]]$/,"",p)移除标点符号 master Master master 到程序结束时:

import asyncio
import datetime as dt
from aiohttp import web


async def search(request):
    print('!START! %s' % dt.datetime.now())

    await asyncio.sleep(5)

    print('!--END! %s' % dt.datetime.now())
    return web.json_response(data={})


app = web.Application()
app.router.add_get('/search/', search)

web.run_app(app)


#run_server
#python -m aiohttp.web -H localhost -P 8080 handler:init_func

答案 1 :(得分:0)

解决方案

您可以将grep与lookbehind一起使用:

grep -Poi '(?<=\bthy )\w+' yourFile.txt

解释

  • -P启用perl正则表达式,允许使用lookbehinds。
  • -o仅打印匹配的单词,而不是完整的行。
  • -i忽略大小写区别,以便识别thyThy
  • (?<=\bthy )是一个值得关注并确保\bthy在比赛前发生,而不包括\bthy
  • \b匹配字边界并阻止somewordthy匹配 - 我们只需要thy这个字。
  • \w+匹配任何字词(在thy之后)。将打印匹配的单词。

结果

对于文件内容

Thy first match. thy. No match. Athy no match. thy thy thy.  

命令打印

first
thy
thy

,因为

         Sentence ends after thy.
             ==> mo match
                  ↓
Thy first match. thy. No match. Athy no match. thy thy thy.  
    ^^^^^                         ↑                ^^^ ^^^
                        "Athy" instead of "thy".
                            ==> mo match

匹配用^^^^^加下划线。

答案 2 :(得分:0)

您只会看到master的2个匹配项,因为您正在搜索小写thy 您可能想要使用tolower($i),即:

awk '{for(i=0;i<=NF;i++) if (tolower($i)=="thy") print $(i+1)}' pg1120.txt

答案 3 :(得分:0)

在循环中使用 awk 可能不是最快的方法。

这可能是最短的。

grep -oP 'thy \K[^ ]+' file