Saya punya file seperti di bawah ini ..
abc, 12345
def, text and nos
ghi, something else
jkl, words and numbers
abc, 56345
def, text and nos
ghi, something else
jkl, words and numbers
abc, 15475
def, text and nos
ghi, something else
jkl, words and numbers
abc, 123345
def, text and nos
ghi, something else
jkl, words and numbers
Saya ingin mengonversinya (bergabung) sebagai:
abc, 12345, 56345, 15475, 123345
def, text and nos, text and nos,text and nos,text and nos
ghi, something else, something else, something else, something else
jkl, words and numbers, words and numbers, words and numbers, words and numbers
text-processing
command-line
awk
join
merge
pvkbhat
sumber
sumber
Jawaban:
Jika Anda tidak keberatan dengan urutan output:
Penjelasan
NF>1
artinya kita hanya perlu memproses untuk baris yang tidak kosong.a
, dengan kuncinya adalah bidang pertama, nilainya adalah bidang kedua (atau sisa baris). Jika kunci sudah memiliki nilai, kami menggabungkan dua nilai.END
blok, kita loop melalui array asosiatifa
, mencetak semua kuncinya dengan nilai yang sesuai.Atau menggunakan
perl
akan menjaga urutan:sumber
perl -F, -lane 'next unless /./;push @{$k{$F[0]}}, ",@F[1..$#F]"; END{print "$_@{$k{$_}}" foreach keys(%k)}' file
:) Pemikir hebat sama saja!Oh, itu mudah. Berikut ini adalah versi sederhana yang menjaga urutan kunci ketika muncul di file:
Output akan terlihat seperti ini:
Jika Anda tidak keberatan memiliki baris kosong tambahan di bagian akhir, cukup ganti
printf
baris denganprintf("%s %s\n\n", Key[j], Val[Key[j]]);
sumber