我有一个采用以下格式的文件:
First Name : aa
#some noninteresting info
...
#some noninteresting info
Last Name : tt
First Name : cc
#some noninteresting info
...
#some noninteresting info
Last Name : ss
我需要生成另一个文件,其中只有名字和姓氏,并根据姓氏排序:
First Name : cc
Last Name : ss
First Name : aa
Last Name : tt
我尝试了以下方法:
grep "Last Name :" | sort
但这只是我想要的一半。如何将名字添加到与姓氏相对应的名称中,并根据姓氏对它们进行排序?
最佳答案
如果您有 GNU sed
,那么您可以通过管道将 grep
的输出传送给它。
grep -E '(First|Last) Name' file | sed 'N;s/\n/ /' | sort -k8 | sed 's/Last/\nLast/'
First Name : cc
Last Name : ss
First Name : aa
Last Name : tt
grep -E '(First|Last) Name' file
将 grep 包含名字和姓氏的行sed 'N;s/\n//'
会将姓氏附加到名字sort -k8
将排序第 8 个字段,即姓氏值sed 's/Last/\nLast/'
会将它们放在单独的行上
如果您没有 GNU sed
,那么您的另一个选择是使用 xargs
:
grep -E '(First|Last) Name' file | xargs -n8 | sort -k8 | xargs -n4
First Name : cc
Last Name : ss
First Name : aa
Last Name : tt
注意:这假设您的数据的每个条目都有名字和姓氏。 xargs
解决方案假定您的名字没有中间名
关于regex - 在不同的行中查找一个匹配项,后跟另一个匹配项并对输出进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23484067/