我有一个列表,我想按名称分组。这应该在每个组之后使用换行符完成。 这是一个示例文件:
$ cat file
2015-07-09 07:03:46 7.5 GiB apple-foo.txt.gpg
2015-07-22 11:36:36 6.9 GiB apple-bar.txt.gpg
2015-07-27 04:40:34 31.0 GiB banana-here.txt.gpg
2015-07-07 20:28:17 30.6 GiB banana-even.txt.gpg
2015-07-19 15:02:20 30.8 GiB banana-more.txt.gpg
2015-07-26 00:05:11 1.9 GiB coconut-something.txt.gpg
2015-07-23 03:34:41 2.1 GiB coconut-else.txt.gpg
2015-07-24 03:34:40 12.1 GiB date-yougetit.txt.gpg
这是我想要的输出:
2015-07-09 07:03:46 7.5 GiB apple-foo.txt.gpg
2015-07-22 11:36:36 6.9 GiB apple-bar.txt.gpg
2015-07-27 04:40:34 31.0 GiB banana-here.txt.gpg
2015-07-07 20:28:17 30.6 GiB banana-even.txt.gpg
2015-07-19 15:02:20 30.8 GiB banana-more.txt.gpg
2015-07-26 00:05:11 1.9 GiB coconut-something.txt.gpg
2015-07-23 03:34:41 2.1 GiB coconut-else.txt.gpg
2015-07-24 03:34:40 12.1 GiB date-yougetit.txt.gpg
我设法提取唯一的名称(苹果,香蕉,椰子,日期),但是在最后一次出现每个唯一名称后,我没有添加新行。 有人能帮帮我吗? awk和sed是最受欢迎的。
答案 0 :(得分:1)
awk
解决方案:
awk -F\- 'NR>1&&$1!=last{print ""}{last=$1}1' infile
解释
-F\-
:将字段分隔符设置为–
。
NR>1
:省略检查的第一行。
last=$1
:始终保存最后一次出现的组密钥。
1
:打印当前行。
1!=last{print ""}
:如果键 $1
NOT 等于last
,则打印分隔符。
<强>更新强>
对于当前来源使用:
awk 'split($NF,a,"-"){current=a[1]}NR>1&¤t!=last{print ""}{last=current}1' infile
解释2
split($NF,a,"-"){current=a[1]
:要通过在a[1]
字符处将其拆分,从行$NF
的最后一个字段中获取密钥-
。