我有一个新要求,现在我需要您的帮助和要求如下
源文件包含两列(帐户ID和地区),对于AccountId
,territoryId
将存储为;TERR1;TERR2;TERR3;
。现在我需要生成如下所示的输出。
源文件:
Accoutn ID , Territory Id
--------------------------------
1 ,;TERR1;TERR1;TERR1;
目标应为;
Accoutn ID , Territory Id
--------------------------------
1 ,TERR1
1 ,TERR2
1 ,TERR3
我已经尝试过awk,但无法成功,您能在这里帮助我吗?
答案 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中均未定义,因此您还面临挑战。