# !/bin/bash
# Associative array for aggregated lines
declare -A lines
# Append second column value to value of first column key
while read -r key value; do
lines[$key]+="$value,"
done < "$1"
for key in "${!lines[@]}"; do
# Print key and comma separated values (last comma removed)
printf "%s\t%s\n" "$key" "${lines[$key]%,}"
done
5条答案
按热度按时间mlmc2os51#
使用awk:
创建一个数组,第一个字段作为索引,内容是所需的串联。
对于输入文件的每一行,请查看第一个字段是否已存储在数组“items”中。存储新字段或添加具有
,
. 处理完所有行后,打印数组。4zcjmb1e2#
用于排序列。克劳迪奥的剧本可能更好。
ne5o7dgx3#
也许不是最好的,但却是一个起点
我用过这个文件
input2.txt
作为输入:这是输出:
当做
克劳迪奥
3mpgtkmj4#
纯bash(关联数组需要bash 4.0或更高版本):
这将为第一列的每个值收集逗号分隔字符串中第二列的值。
然后,第二个循环获取每个键,删除该行末尾的逗号,并打印键和逗号分隔的值。
对于示例输入,我们得到
注意,键的顺序是不确定的。
zpjtge225#
如果第一个单词(项目)已分组: