Создайте пары «тег элемента» из списков «item, item, … | tag»

Характеристики входных данных:

  • Каждая строка состоит из двух полей, разделенных трубой '|', где
  • первое поле представляет собой список элементов, разделенных запятыми, и
  • второе поле является тегом.

вход

100,210,354,462|acct 331,746,50|mis 90,263,47,14|sales 

Вывод

 100acct 210acct 354acct 462acct 331mis 746mis 50mis 90sales 263sales 47sales 14sales 

5 Solutions collect form web for “Создайте пары «тег элемента» из списков «item, item, … | tag»”

Предполагая, что элементы не содержат «|», а теги не содержат «,»:

 awk -F '[,|]' '{for(i=1;i<NF;i++)print$i$NF}' input.txt 

Сделают ли PERL?

 $ perl -ne 'chomp; @a=split(/\|/); @b=split(/,/,$a[0]); map{print "$_$a[1]\n"}@b' input.txt 

Чистое решение:

 sed ':a;s/\(.*\),\([^,]*\)|\(.*\)/\2\3\n\1|\3/;ta;s/|//' input.file 

И теперь, только в bash и sed:

 cat test.txt| while IFS="|" read it ; do echo $i | sed "s/\([0-9]\+\)/\1$t/g;s/,/\n/g" ; done 

И только в bash (любезность Nahuel Fouilleul):

  while IFS="|" read it;do while read -d, j;do echo "$j$t";done <<<"$i,";done <test.txt 

Сед …

 sed -e 's/^\([0-9][0-9]*\),.*|\(.*\)/\1\2/' 

если первое поле не числовое, тогда его можно изменить на что-то вроде

 sed -e 's/^\([^,][^,]*\),.*|\(.*\)/\1\2/' 
  • Sanitize файлы журнала доступа Apache?
  • Сед работает как другой пользователь?
  • Мне нужно удалить. в моих данных
  • Существует ли `sed` во всех * nixes?
  • Использовать sed для добавления символа в n-й позиции соответствующей строки
  • Отображать слова в цвете
  • Замена части строки другой частью той же строки
  • grep до соответствия скобкам
  • Переформатирование отрицательных чисел с помощью sed или awk
  • Почему эта команда не работает в AIX?
  • Параллелизация sed дает разную производительность
  • Interesting Posts

    Можно ли сделать локальную потерю эффективной с разреженными файлами?

    автопринятие ключа rsa в скрипте bash

    raid 0 восстановление после случайного dd на диск

    Безопасно ли открывать порт 35000: 40000 для подключения данных FTP

    IP-адреса, которые я связывал, продолжают перестать отвечать на ping

    Почему скайп не поднимает мой микрофон?

    Найти последнее появление строки в нескольких файлах

    файловая система «/ boot» не является файловой системой системного раздела FAT EFS (ESP)

    Почему есть два файла ifcfg-eth0, но в другом каталоге

    Настройка командной строки

    KDE Plasma: сообщения Skype открывают панель и не закрываются, пока не будут нажаты

    Редактировать вывод inotifywait в режиме демона

    Как добавить контрольную сумму MD5 содержимого электронной почты в bash?

    Разрешить пользователю NonRoot монтировать определенный внешний жесткий диск NTFS

    Безмоментный запуск задачи в фоновом режиме

    Linux и Unix - лучшая ОС в мире.