匹配bash中的某些文本后插入新行

时间:2019-04-03 08:54:54

标签: shell sorting awk

我有一个文件:

aaaa_bbb_ccc: something
aaaa_ddd_zzz: something
bbbb_ccc_ddd: something
bbbb_ccc_eee: something
bbbb_ddd_eee: something
bbbb_ddd_fff: something
bbbb_eee_ggg: something

我想插入一个新行,基本上按第一个单词排序,然后按字母顺序按第二个字母分组,以使内容类似:

aaaa_bbb_ccc: something

aaaa_ddd_zzz: something

bbbb_ccc_ddd: something
bbbb_ccc_eee: something

bbbb_ddd_eee: something
bbbb_ddd_fff: something

bbbb_eee_ggg: something

我尝试过awk 'NR>1 && a && substr($1,1,1)!=a{ print "" }{ a=substr($1,1,1) }1',但只会在第一个单词之后插入。

2 个答案:

答案 0 :(得分:3)

尝试一下这个awk:

awk -F'_' '{k=$1FS$2}k!=p&&NR>1{print ""}7;{p=k}' file

这适用于给定的示例。您的输入文件必须经过排序,并且不能存在空行。

答案 1 :(得分:0)

另一个awk,假设您输入的是问题中的排序输入

awk -F"_" ' { c=$2;if(c!=p && NR>1) { print "" } print ; p=c; } ' file