从解压缩的CSV中删除标头

时间:2015-03-19 23:40:03

标签: regex unix csv pipe

我在unix中使用以下行来解压缩.tar.gz文件并将所有文件推送到一个漂亮的CSV文件中。

> gunzip -c foo.tar.gz > foo.csv

问题是,文件附加了一种标题,如下所示:

path-to-csv-on-s3/foo.csv����������������������������000644 �000765 �000024 �00132244376 12501623550 027273� 0����������������������������������������������������������������������������������������������������ustar�00hills���������������������������staff���������������������������000000 �000000 

我尝试过使用像

这样的东西
gunzip -c s3-foo.tar.gz | sed "1 d" > foo.csv

删除第一行,但它也会删除所有列名。有人知道解决这个问题的简单方法吗?这是前几行数据的样子:

path-to-csv-on-s3/foo.csv000644 000765 000024 00132244376 12501623550 027273 0ustar00hillsstaff000000 000000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������"","id","price", "lala", "hooha"
1, some-ID, 45, 'blah', 'yay',
4, some-ID, 32, 'lah', 'yay!'

由于

1 个答案:

答案 0 :(得分:1)

尝试将此用于您的sed表达式:sed -e '1 s/^.*\(\"\".*\)/\1/'

使用替换运算符,它看起来像s/pattern-to-math/replacement/。我匹配行^的开头,之后的任何内容.*,然后是(...)中的捕获组,后跟""后跟任何内容.*。在运算符的替换部分中,我只需放入捕获组\1

我使用echo "path-to-csv-on-s3/foo.csv000644 000765 000024 00132244376 12501623550 027273 0ustar00hillsstaff000000 000000 \"\",\"id\",\"price\", \"lala\", \"hooha\"" | sed -e '1 s/^.*\(\"\".*\)/\1/'"","id","price", "lala", "hooha"进行了测试,似乎效果很好