从DB解析CSV文件

时间:2015-09-14 08:36:25

标签: bash perl awk sed

我将这个数据库转储文件放在逗号分隔的CSV文件中,第一行作为标题/表名,其余部分是数据,有些则有重复的条目

listSources

我只需在HOST_#_INFORMATION,HOST#,Primary Hostname,DNS Domain,IP_#_INFORMATION,Primary IP,DNS ,11,abc,example.com,,10.10.10.10,10.10.10.1 ,12,bcd,example.com,,10.10.10.11,10.10.10.1 ,13,cde,example.com,,10.10.10.12,10.10.10.1 ,11,abc,example.com,,10.10.10.10,10.10.10.1 ,13,cde,example.com,,10.10.10.12,10.10.10.1 HOST_#_INFORMATION之间打印唯一列。我正在寻找的输出是

IP_#_INFORMATIO

我尝试使用awk gsub选项但只打印第一行。我该如何解析这个csv文件。我也对perl选项持开放态度。感谢

5 个答案:

答案 0 :(得分:2)

[root@test /tmp]$ awk -F, -vOFS=, '{if(++a[$2,$3,$4]==1)print $2,$3,$4}' a  

HOST#,Primary Hostname,DNS Domain
11,abc,example.com
12,bcd,example.com
13,cde,example.com

答案 1 :(得分:1)

不需要awk或sed,而是使用cut'n'sort:

cut -d, -f2-4 infile | sort -u

输出:

11,abc,example.com
12,bcd,example.com
13,cde,example.com

答案 2 :(得分:0)

假设您的输入格式(OP指定2个字段但显示1个配置)

awk -F ',' 'NR == 1{print "HOST#,Primary Hostname,DNS Domain"} NR > 1{print $2 "," $3, "," $4}' YourFile

答案 3 :(得分:0)

假设您将从数据中单独解析标头,这是解析数据和删除重复项的方法:

awk -F',' '{print $2","$3","$4}'|sort -u

答案 4 :(得分:0)

在Perl中,您可以使用Text::CSV模块,该模块具有丰富的功能集来处理CSV文件。