格式化数据以使用sed或awk以逗号分隔记录

时间:2018-02-08 17:16:37

标签: awk sed

我的数据格式如下:

 id : 1234, name :  ABC, XYZ
 id : 7891, name :  MNO 

我正在尝试以下面的格式实现数据:

 id : 1234, name :  ABC
 id : 1234, name :  XYZ
 id : 7891, name :  MNO

我能够完成第一行,但是如何将id带到第二行?

3 个答案:

答案 0 :(得分:1)

Awk 解决方案:

awk '{ $NF=$NF }
     $NF ~ /,/{ 
         gsub(/[[:space:]]*/, "", $NF);
         len=split($NF, a, ",");
         for (i=1; i<=len; i++) { $NF=a[i]; print $0 }
         next 
     }1' FS=' +: +' OFS=' : ' file

输出:

id : 1234, name : ABC
id : 1234, name : XYZ
id : 7891, name : MNO

答案 1 :(得分:0)

如果您的Input_file与显示的示例相同,则以下内容可能会对您有所帮助。

awk -F, '
{
  split($2,array," ");
  print $1","$2;
  for(i=3;i<=NF;i++){
    print $1", "array[1],array[2],$i}
}
'   Input_file

输出如下:

id : 1234, name :  ABC
id : 1234, name :  XYZ
id : 7891, name :  MNO

答案 2 :(得分:0)

另一个awk解决方案

awk -F: '
{
a=split($NF,b,",");
for(i=1;i<=a;i++)
  {
  sub(/^ */,"",b[i]);
  $NF=" "b[i];
  print $0
  }
}
' OFS=: infile

或使用sed

sed -n '
s/.*/&,/
:A
h
s/\(.*:.*:\)\([^,]*\),\(.*\)/\1\3/
x
s/\(.*:.*:\)\([[:blank:]]*\)\([^,]*\),\(.*\)/\1 \3/p
x
/,$/bA
' infile