چنان که شخصی بخواهد این فایل را:
foo: entry1
bar: entry2
foo: entry3
baz: entry4
تبدیل کند به این
foo: entry1 entry3
bar: entry2
baz: entry4
دو روش ساده عمومی برای انجام این کار وجود دارد:
یک پیادهسازی اساسی از روش
old=xxx ; stuff=
(sort file ; echo xxx) | while read prefix line ; do
if [[ $prefix = $old ]] ; then
stuff="$stuff $line"
else
echo "$old: $stuff"
old="$prefix"
stuff=
fi
done
و یک پیادهسازی اساسی از روش
{
a[$1,++b[$1]] = $2;
}
END {
for (i in b) {
printf("%s", i);
for (j=1; j<=b[i]; j++) {
printf(" %s", a[i,j]);
}
print "";
}
}
نوشته شده به صورت یک سطر دستور مفصل در پوسته:
awk '{a[$1,++b[$1]]=$2} END {for (i in b) {printf("%s", i); for (j=1; j<=b[i]; j++) printf(" %s", a[i,j]); print ""}}' file
پرسش و پاسخ 57 آخرین ویرایش 2012-03-29 20:36:56 توسط ormaaj)