对行进行排序和格式化



我有以下几行:

a;http://example.com/
b;http://qwerty.com/
a;http://example2.com/
c;http://example2.com/
c;http://example2.com/
a;http://example3.com/
b;http://qwerty.com/
b;http://qwerty3.com/
c;http://qwerty.com/
c;http://example5.com/

,并希望从中获得以下格式:

a;http://example.com/,http://example2.com/,http://example3.com/
b;http://qwerty.com/,http://qwerty3.com/
c;http://example2.com/,http://example5.com/,http://qwerty.com/

,但不太明白它是如何做到的,算法。执行以下步骤:

# sort the original list by the first main item; 
output=$(printf "%s" "${output}" | sort -t; -k1 -n | sort -u)
# split items into two parts
item1=$(printf "%s" "${output}" | cut -d; -f 1)
item2=$(printf "%s" "${output}" | cut -d; -f 2)

现在排序列表的两个部分可以用来工作,但是如何以及以哪种方式构建进一步的逻辑,我仍然不太理解。似乎下一步是建立某种循环,并开始在其中使用item1item2。谁能指出下一步或举个例子?

可能是:

sort -u /tmp/test.list | 
awk -F';' '
{
vect[$1] = vect[$1]","$2
}
END {
OFS=";"
for (idx in vect) {
print idx, substr(vect[idx], 2)
}
}'

你不关心重复,所以sort -u将帮助。

最新更新