Поиск строк (значений) между двумя точками с запятой и разбиением на строки - PullRequest
0 голосов
/ 11 октября 2018

У меня есть новое требование, и теперь мне нужна ваша помощь и требование следующим образом

Исходный файл содержит два столбца (идентификатор учетной записи и территорию) и для одного AccountId, territoryId будет храниться как;TERR1;TERR2;TERR3;.Теперь мне нужно сгенерировать вывод, как показано ниже.

Исходный файл:

Accoutn ID , Territory Id
--------------------------------
1      ,;TERR1;TERR1;TERR1;

Цель должна быть; enter image description here

Accoutn ID , Territory Id
--------------------------------
1         ,TERR1
1         ,TERR2
1         ,TERR3

Я пробовал с awk, ноне удалось, Можете ли вы помочь мне здесь?

1 Ответ

0 голосов
/ 13 октября 2018

В комментарии я показал решение на основе sed, но это может быть сложно.
Вы можете использовать awk (хороший выбор) или попробовать что-то, что будет работать для небольших файлов.Пошаговое обучение с использованием цикла.
Чтение файла и отображение строк

while IFS= read -r line; do
   echo "${line}"          
done < source_file         

Эхо-то особенное, когда строка имеет ';'

while IFS= read -r line; do
   if [[ "${line}"=~ ; ]]; then
     echo "Something special"
   else
      echo "${line}"
   fi
done < source_file

Делайте что-то особенное, когда строка имеет';'

#!/bin/bash
while IFS= read -r line; do
       if [[ "${line}" =~ ";" ]]; then
          while IFS= read -r field; do
             if [ -z "${firstfield}" ]; then
                firstfield="${field}"
             else
                echo "${firstfield}${field}"
             fi
           done < <( echo "${line}" | tr ';' '\n' )
       else
          echo "${line}"
       fi
    done < source_file

Понижение до ksh или sh при необходимости
И if [[ .. ]], и <(..) не определены в POSIX, поэтому у вас остался вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...