我有一个文件,里面充满了我用于i18n的键和值。该文件如下所示:
foo.foo=Some string
foo.bar=Some string
bar.foo=Some string
bar.bar=Some string
baz.foo=Some string
baz.bar=Some string
使用某些unix工具(如awk或sed),如何过滤文件以便以相同前缀(直到第一个点)开头的行组合在一起,并且组之间用空行分隔?
输出应该看起来像
foo.foo=Some string
foo.bar=Some string
bar.foo=Some string
bar.bar=Some string
baz.foo=Some string
baz.bar=Some string
答案 0 :(得分:3)
这应该做:
awk -F. '$1!=a && NR>1 {print ""} 1; {a=$1}' file
foo.foo=Some string
foo.bar=Some string
bar.foo=Some string
bar.bar=Some string
baz.foo=Some string
baz.bar=Some string
答案 1 :(得分:1)
awk -F. 'a!=$1{print '\n';a=$1}1' File
将.
设置为字段分隔符。将first field
复制到变量a
。每当一行包含first field
的新值(即a!=$1
)时,请打印newline
。
<强>输出:强>
AMD$ awk -F. 'a!=$1{print '\n';a=$1}1' File
foo.foo=Some string
foo.bar=Some string
bar.foo=Some string
bar.bar=Some string
baz.foo=Some string
baz.bar=Some string
答案 2 :(得分:0)
虽然这不完全符合您的规范(awk
,sed
,.
分隔),但它适用于您的示例:
您可以使用uniq
进行分组。对于您的示例,相应的命令将是
uniq --group -w 3 file
-w/--check-chars=n
对于仅在n个字符的前缀上确定相等性至关重要。不幸的是,这不允许在.
之前使用可变长度,但对于统一的前缀长度,我发现它比awk解决方案更容易理解。