Создайте пары «тег элемента» из списков «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/' 
  • Копирование XML-контента между двумя тегами из одного файла в другой
  • Curl url txt file, но grep каждый URL отдельно от одного файла
  • Передача обычных файлов только на `sed -i`
  • Удаление пустой строки и строки над ней
  • команда sed unterminated `s
  • Замена переменной, содержащей \ with sed
  • Удалить все узлы <FOLDER>! = Значение тега
  • как переместить заголовок в последний столбец, используя awk или sed
  • sed: совпадение двух строк
  • Как grep-inverse-match и исключать строки «before» и «after»
  • Разбор таблицы текстовых файлов и агрегирование информации
  • Linux и Unix - лучшая ОС в мире.