我的数据格式如下:
id : 1234, name : ABC, XYZ
id : 7891, name : MNO
我正在尝试以下面的格式实现数据:
id : 1234, name : ABC
id : 1234, name : XYZ
id : 7891, name : MNO
我能够完成第一行,但是如何将id带到第二行?
答案 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