چنان که شخصی بخواهد این فایل را:
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)