在数据库中经常碰到,把固定分隔符的一行记录转换成多行,如图:

图1
我现在想把它转成下图的样式:

图2
在数据库中,通过sql语句可以完成这样的转换,不过sql语句并不简单,事实上还很复杂,我之前写过这方面的帖子,见下面连接:
https://wenda.zuncuang.com/article/17
其实通过linux下的awk命令,可以更快更方面的完成这种转换,加入图1的文本存入ff.txt 中,那么使用如下的shell命令可以非常快速的完成:
awk -F '[ \t,]+' '{for(i=2;i<=NF;i++)print $1" "$i }' ff.txt|sed -r '/\s+$/d'
上面命令最关键的是,awk 的分隔符可以使用正则表达式,本例中正则匹配“空格,制表符和逗号” 然后通过awk的for循环,每行的条件结束为NF(分隔符分割出来的域数),i从2开始
因为i=1的时候,$i 和$1重复;中间很多逗号分隔域中没有内容,去除结果中有很多图片路径为空的,可以进一步通过sed 命令来删除这部分, sed -r 启动的扩展的正则,默认只支持POSIX 基本匹配,比如空格只能使用[ ],启用-r 后空格可以使用\s 匹配,\s 也可以匹配制表符 \s+$ 表示结尾有多个空格 通过/d指令删除