格式化数据以使用sed或awk以逗号分隔记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了格式化数据以使用sed或awk以逗号分隔记录相关的知识,希望对你有一定的参考价值。
我有以下格式的数据:
id : 1234, name : ABC, XYZ
id : 7891, name : MNO
我试图以下面的格式实现数据:
id : 1234, name : ABC
id : 1234, name : XYZ
id : 7891, name : MNO
我能够完成第一行,但是如何将id带到第二行?
答案
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
另一答案
如果您的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
另一答案
另一个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/(.*:.*:)([^,]*),(.*)/13/
x
s/(.*:.*:)([[:blank:]]*)([^,]*),(.*)/1 3/p
x
/,$/bA
' infile
以上是关于格式化数据以使用sed或awk以逗号分隔记录的主要内容,如果未能解决你的问题,请参考以下文章