我必须重新格式化许多很长的表格,如下所示
原始格式:
John Smith,Jones,Taylor
Janet Williams,Brown,Wilson
所需格式:
John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson
我怎样才能这样做呢?
答案1
和awk
:
awk -F"[ ,]" '{for(i=2;i<=NF;i++){print $1,$i;}}' file
-F"[ ,]"
: 分隔符设置为空格和逗号。现在我们在$1
名字中添加了姓氏,在$2
最后一个字段中添加了姓氏。for(i=2;i<=NF;i++)
:循环遍历每个字段,从字段 2 开始。print $1,$i;
:打印名字,然后打印姓氏。
输出:
John Smith
John Jones
John Taylor
Janet Williams
Janet Brown
Janet Wilson
答案2
尝试
awk ' { n=split($2,A,",") ;
for (i=1;i<=n;i++) printf "%s %s\n",$1,A[i] ;
} ' file
在哪里
split($2,A,",")
将用逗号 (,) 分割第二个字段,n=
会算for( )
将循环A[i]
是当前姓名(或姓氏)printf "%s %s\n",$1,A[i]
一起打印。
答案3
和sed:
sed ':1;s/,/\n/;T;P;s/\S*\n//;t1' file
:1
标记返回点s/,/\n/
s
n
用ewline 替换第一个逗号T
如果替换未执行(行中没有更多逗号)传递到脚本末尾P
打印从头到尾的n
行s/\S*\n//
用ewline 删除单词(\S*
任何非空符号)n
t1
如果替换成功——返回1
点
或者更多POSIX'ly
sed ':1;s/,/\n/;/\n/P;s/\S*\n//;t1' file