2

我有一个 tar 文件,里面有很多 csv 文件。如何在不提取的情况下获取每个 csv 文件的前几行?

我试过了:

$(tar -Oxf $tarfile $file | head -n "$NL") >> cdn.log

但得到错误说:

time(http:index: command not found

这是其中一个 csv 文件中的某行。所有 csv 文件都报告了类似的错误……知道吗?

4

2 回答 2

3

使用-O您可以告诉 tar 将文件提取到标准输出而不是文件。因此,您应该能够首先使用tar tf <YOUR_FILE>列出存档中的文件并过滤它grep以查找 CSV 文件,然后为每个文件使用tar xf <YOUR_FILE> <NAME_OF_CSV> -O | head将文件的开头获取到标准输出。这可能有点无效,因为您解压缩档案的数量与 CSV 文件一样多,但应该可以。

于 2013-09-27T10:23:41.863 回答
0

您可以使用及其Archive::Tar模块。这是一个提取每行的前两行的单行:

perl -MArchive::Tar -E '
    for (Archive::Tar->new(shift)->get_files) { 
        say (join qq|\n|, (split /\n/, $_->get_content, 3)[0..1]) 
    }
' file.tar

它假定该tar文件只有文本文件,它们是csv. 否则,您将不得不grep在列表中过滤您想要的那些。

于 2013-09-27T10:50:56.610 回答