如何从tar文件中的csv文件中提取前几行而不在linux中提取它?

时间:2013-09-27 10:19:37

标签: linux shell csv tar

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

我试过了:

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

但是有错误说:

time(http:index: command not found

这是其中一个csv文件中的某一行。报告了所有csv文件的类似错误... 有什么想法??

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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列表来过滤您想要的内容。