1

标题是不言自明的。我正在调用一个 Web 服务,它返回一个这样的字符串:

First Name="Kunal";Middle Name="";Last Name="Bhowmick";Address 1="HGB";Address 2="cvf";Address 3="tfg";City="DF";State="KL";Country="MN";Postal Code="0012";Telephone="(+98)6589745623"

现在我必须编写一个 shell 脚本来创建一个名为的 csv 文件CSV_Output.csv,并且该文件必须使用字符串内容进行格式化。

格式必须是这样的:

Field Name(in yellow color)      Value(in yellow color)

First Name                              Kunal
Middle Name
Last Name                               Bhowmick                            
Address 1                               HGB
Address 2                               cvf
Address 3                               tfg
City                                    DF
State                                   KL
Country                                 MN
Postal Code                             0012
Telephone                               (+98)6589745623 

现在我可以轻松地使用 CSV 文件生成 CSV 文件redirection(>>),但是如何创建和格式化 CSV 文件,如上面所示的格式?

抱歉,坦率地说,我也没有代码可以显示,因为我不明白在这里使用什么。

请提供一些建议(示例代码)。任何帮助是极大的赞赏 。

4

2 回答 2

2

awk one-liner 可以转换格式:

awk -v RS="\\n|;" -v OFS="\t"  -F=  '{gsub(/"/,"");$1=$1}7' file

如果您希望输出看起来更好,您可以将输出传递给column并更改OFS如下:

awk -v RS="\\n|;" -v OFS="#"  -F=  '{gsub(/"/,"");$1=$1}7' file|column -s"#" -t

输出是:

kent$  awk -v RS="\\n|;" -v OFS="#"  -F=  '{gsub(/"/,"");$1=$1}7' f|column -s"#" -t
First Name   Kunal
Middle Name  
Last Name    Bhowmick
Address 1    HGB
Address 2    cvf
Address 3    tfg
City         DF
State        KL
Country      MN
Postal Code  0012
Telephone    (+98)658974562

简短说明:

awk             #awk command
-v RS="\\n|;"   #set line separator is \n(newline) or ;(semi)
-v OFS="\t"     #set output field separator: <tab>
-F=             #set "=" as field separator
'{gsub(/"/,""); #remove all double quotes
$1=$1}          #$1=$1, to let awk reformat the line with given OFS
7'              #the non-zero number to print the whole line.
于 2013-08-30T12:13:33.553 回答
1

可以使用trand来实现column

$ cat input
First Name="Kunal";Middle Name="";Last Name="Bhowmick";Address 1="HGB";Address 2="cvf";Address 3="tfg";City="DF";State="KL";Country="MN";Postal Code="0012";Telephone="(+98)6589745623"

$ cat input | tr ";" "\n" | column -s= -t | tr -d \"
First Name   Kunal
Middle Name  
Last Name    Bhowmick
Address 1    HGB
Address 2    cvf
Address 3    tfg
City         DF
State        KL
Country      MN
Postal Code  0012
Telephone    (+98)6589745623

拆分输入;;通过管道将输出column指定=为分隔符,去掉引号!

EDIT:没有意识到你想要一个 CSV。在这种情况下,使用:

$ cat input | tr ";" "\n" | tr "=" "\t" | tr -d \"

这将导致TAB分隔输出。

于 2013-08-30T11:57:59.763 回答