【问题标题】:Sorting and grouping lines with if construction使用 if 构造对行进行排序和分组
【发布时间】:2016-05-01 20:53:06
【问题描述】:

这是我的输入文件

otf.msn.com
otf.msn.com
accounts.google.com
Email=adresemail@gmail.com
www.x-kom.pl
login=przykladowyuzytkownik
allegro.pl
ssl.allegro.pl
www.bing.com
www.bing.com
www.bing.com
www.bing.com
store.steampowered.com
username=steamuser
logowanie.interia.pl
login.live.com
login=mailhotmail@hotmail.com
www.bing.com

我需要与用户名/用户/登录名和站点地址建立关系。 站点地址始终位于用户/电子邮件/登录名上方。条件可以是= 符号。

如果行包含= 那么这一行=用户 上面的行 (line-1) = 站点

我想要的是一个连接了用户和站点的文件。 输出可以是 txt 文件。用户和站点可以在一行中 f.e

accounts.google.com - Email = adresmail@gmail.com

或喜欢在我的输入文件中

accounts.google.com 
Email=adresmail@gmail.com
store.steampowered.com
username=steamuser

问题是:我怎样才能做出这个条件? 我的意思是我是 awk/grep/sed 的新手,不知道如何构建 if 条件。 如何获得包含= 的行上方的行/如何使关系beetwen 与= 和上方的行建立关系? 简而言之 将包含= 的每一行与上面的行分组。将此输出到文件。

谢谢:)

【问题讨论】:

  • 你到底是怎么知道哪个电子邮件与哪个网站匹配的?
  • 您已经提出了一些类似的问题。您显然必须提供更明确的要求。见How to Askminimal reproducible example
  • 正如我所说,电子邮件/用户名与上面的站点匹配(前行)。它是关于将用户名/登录名/邮件与上一行匹配的行。
  • 问题是:问题是什么?尝试在任何地方添加问号。
  • 这似乎是您第 5 次提出基本相同的问题,每次都对您的要求稍作调整,并且您还没有接受前 4 个问题的答案。我不预计这一次情况会好转。我不明白为什么你不能随便发布 A QUESTION 有什么要求。

标签: bash awk sed grep


【解决方案1】:

这个怎么样:

$ grep = input.txt -B1 | grep -v -e "--" | sed "N;s/\n/ - /"

【讨论】:

  • 描述它的工作原理对您来说有问题吗?我要花很多时间才能找到每个命令的工作原理
  • 现在这只是懒惰。
【解决方案2】:

awk 来救援!

$ awk '/=/{print p "\t" $0} {p=$0}' file | column -t

accounts.google.com     Email=adresemail@gmail.com
www.x-kom.pl            login=przykladowyuzytkownik
store.steampowered.com  username=steamuser
login.live.com          login=mailhotmail@hotmail.com

【讨论】:

    【解决方案3】:

    我认为不值得以“被问”的方式回答这个问题,但它满足了我对破解sed 的恋尸癖的热情。请原谅我忍不住回答这个问题。

    #! /bin/sh
    sed -n "
    /^Email/{
     H;g;s/\nEmail=/ /p
    }
    h" <<EOF
    otf.msn.com
    otf.msn.com
    accounts.google.com
    Email=adresemail@gmail.com
    www.x-kom.pl
    login=przykladowyuzytkownik
    allegro.pl
    ssl.allegro.pl
    www.bing.com
    www.bing.com
    www.bing.com
    www.bing.com
    store.steampowered.com
    username=steamuser
    logowanie.interia.pl
    login.live.com
    login=mailhotmail@hotmail.com
    www.bing.com
    EOF
    

    输出是:

    accounts.google.com adresemail@gmail.com
    

    如果该行以Email 开头,则追加模式空间以保持空间,将保持空间复制到模式空间,替换关键字并打印结果。接下来将保持空间复制到模式空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多