我有一个用逗号分隔的文件。我想将每隔一列打印到新行中。
示例输入文件:
Name : John, Age : 30, DOB : 30-Oct-2018
示例输出:
Name,Age,DOB
John,30,30-Oct-2018
答案 0 :(得分:1)
非awk
解决方案
$ sed 's/[,:]/\n/g;s/ //g' file | pr -3ts,
Name,Age,DOB
John,30,30-Oct-2018
答案 1 :(得分:0)
awk 'BEGIN{FS="[[:blank:]]*[:,][[:blank:]]*"}
{ for(i=1;i<=NF;i+=2) printf (i==1?"":",") $i; print "" }
{ for(i=2;i<=NF;i+=2) printf (i==1?"":",") $i; print "" }' inputfile
答案 2 :(得分:0)
根据您的示例并输出:
$ awk -F', ' '/ : / { for (i=1;i<=NF;i++) { if ( match($i,/ : /) ) { linekeys=linekeys substr($i,1,RSTART-1) ","; linevalues=linevalues substr($i,RSTART+RLENGTH) ","; } } print(substr(linekeys,1,length(linekeys)-1)); print(substr(linevalues,1,length(linevalues)-1)); linekeys=""; linevalues=""; }' file.txt
Name,Age,DOB
John,30,30-Oct-2018
答案 3 :(得分:0)
这是您可以用来实施解决方案的一般想法。
使用awk的split
函数。
rows
)将整行分割成一个数组", "
,并保存行数。cols
)将每一行拆分为一个数组" : "
,并保存列数。并遍历列值并将其存储到表中,该表按行和列进行索引,例如data[row","col]
。data[row","col]
。