Bash 使用if构造对行进行排序和分组

Bash 使用if构造对行进行排序和分组,bash,awk,sed,grep,Bash,Awk,Sed,Grep,这是我的输入文件 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

这是我的输入文件

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
accounts.google.com 
Email=adresmail@gmail.com
store.steampowered.com
username=steamuser
我需要与用户名/用户/登录名和网站地址建立关系。 站点地址始终位于用户/电子邮件/登录名的上方。条件可能是
=
符号

如果行包含
=
那么这一行=用户 上述线路(线路-1)=现场

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

accounts.google.com - Email = adresmail@gmail.com
或者像在我的输入文件中一样

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
accounts.google.com 
Email=adresmail@gmail.com
store.steampowered.com
username=steamuser
问题是:我怎样才能创造这个条件? 我是说我是awk/grep/sed新手,不知道如何建立if条件。 如何获取包含
=
/的行上方的行,如何使行与
=
和上方的行建立关系? 简言之 将包含
=
的每一行与上面的行分组。将此输出到文件

谢谢:)

这个怎么样:


$grep=input.txt-B1 | grep-v-e”--“| sed”N;s/\N/-/”
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

我不认为以“被问”的方式回答这个问题是值得的,但它满足了我对黑客
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

如果行以
Email
append pattern space to hold space开头,则将hold space复制到pattern space中,替换关键字并打印结果。下一个副本保留空间到模式空间。

你到底怎么知道哪封电子邮件与哪个站点匹配?你问了几个类似的问题。显然,您必须提供更明确的要求。正如我所说,电子邮件/用户名与上面的站点匹配(前一行)。这是关于将行与用户名/登录名/邮件与行上方匹配的问题。问题是:问题是什么?试着在任何地方添加一个问号。这似乎是你第五次问本质上相同的问题,每次都对你的要求稍作调整,但你没有接受前4个问题的答案。我不指望这次情况会好转。我不明白为什么你不能只发布一个问题,不管你的要求是什么。描述它是如何工作的对你来说是个问题吗?我要花很多时间才能找到每个命令是如何工作的,现在这只是懒惰。