搜索两个分号之间的字符串(值)并拆分为行

时间:2018-10-11 12:39:26

标签: shell unix

我有一个新要求,现在我需要您的帮助和要求如下

源文件包含两列(帐户ID和地区),对于AccountIdterritoryId将存储为;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 :(得分:0)

在评论中,我展示了基于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中均未定义,因此您还面临挑战。