У меня есть файл, как показано ниже ..
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
Я хочу преобразовать (присоединиться) это как:
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
источник
источник
Ответы:
Если вы не возражаете против порядка вывода:
объяснение
NF>1
это означает, что нам нужно обработать только строку, которая не является пустой.a
, причем ключом является первое поле, значением является второе поле (или остальная часть строки). Если ключ уже имеет значение, мы объединяем два значения.END
блоке мы перебираем ассоциативный массивa
, печатаем все его ключи с соответствующим значением.Или с помощью
perl
сохранит порядок:источник
perl -F, -lane 'next unless /./;push @{$k{$F[0]}}, ",@F[1..$#F]"; END{print "$_@{$k{$_}}" foreach keys(%k)}' file
:) Великие умы думают одинаково!О, это легко. Вот простая версия, которая сохраняет порядок ключей, как они появляются в файле:
Вывод должен выглядеть так:
Если вы не возражаете иметь лишнюю пустую строку в конце, просто замените
printf
строку наprintf("%s %s\n\n", Key[j], Val[Key[j]]);
источник