按前缀分组行
Group lines by prefix
我有一个包含用于 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
使用 awk 或 sed 等 unix 工具,如何过滤文件以便将以相同前缀(直到第一个点)开头的行组合在一起,并用空行分隔组?
输出应该类似于
foo.foo=Some string
foo.bar=Some string
bar.foo=Some string
bar.bar=Some string
baz.foo=Some string
baz.bar=Some string
应该这样做:
awk -F. '!=a && NR>1 {print ""} 1; {a=}' 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
awk -F. 'a!={print '\n';a=}1' File
设置.
作为字段分隔符。将 first field
复制到变量 a
。每当一行包含 first field
的新值(即 a!=
)时,打印 newline
.
输出:
AMD$ awk -F. 'a!={print '\n';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
虽然这不完全符合您的规格(awk
、sed
,分隔 .
),但它适用于您的示例:
您可以使用uniq
进行分组。对于您的示例,相应的命令将是
uniq --group -w 3 file
-w/--check-chars=n
对于仅在 n 个字符的前缀上确定相等性至关重要。不幸的是,这不允许 .
之前的可变长度,但对于统一的前缀长度,我发现它比 awk 解决方案更容易理解。
我有一个包含用于 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
使用 awk 或 sed 等 unix 工具,如何过滤文件以便将以相同前缀(直到第一个点)开头的行组合在一起,并用空行分隔组?
输出应该类似于
foo.foo=Some string
foo.bar=Some string
bar.foo=Some string
bar.bar=Some string
baz.foo=Some string
baz.bar=Some string
应该这样做:
awk -F. '!=a && NR>1 {print ""} 1; {a=}' 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
awk -F. 'a!={print '\n';a=}1' File
设置.
作为字段分隔符。将 first field
复制到变量 a
。每当一行包含 first field
的新值(即 a!=
)时,打印 newline
.
输出:
AMD$ awk -F. 'a!={print '\n';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
虽然这不完全符合您的规格(awk
、sed
,分隔 .
),但它适用于您的示例:
您可以使用uniq
进行分组。对于您的示例,相应的命令将是
uniq --group -w 3 file
-w/--check-chars=n
对于仅在 n 个字符的前缀上确定相等性至关重要。不幸的是,这不允许 .
之前的可变长度,但对于统一的前缀长度,我发现它比 awk 解决方案更容易理解。