使用Bash命令行折叠键值文件

时间:2017-10-23 12:40:03

标签: bash

我有一个类似的文件:

foobar Me
baz    I
baz    love
foobar too.
baz    you.

我想使用第一列作为键来折叠它,第二列作为累积信息。在前面的示例中,输出将是:

baz    I love you.
foobar Me too.

(第二列将用空格或制表符连接)

我知道我可以用AWK,Python,Perl等来做,但我想用普通的Bash命令来做。

1 个答案:

答案 0 :(得分:1)

如果你只想要bash,请在while循环中读取文件,并在关联数组中累积值。

$ declare -A values
$ while read -r key val; do values["$key"]+="$val "; done < file
$ for key in "${!values[@]}"; do printf "%s\t%s\n" "$key" "${values[$key]}"; done
baz     I love you.
foobar  Me too.

请注意,数组键的顺序为 indeterminate 。只是偶然的输出是baz然后foobar。如果您需要输出具有特定顺序,则需要更多代码。