我有一个tar文件,里面有很多csv文件。 如何获取每个csv文件的前几行而不提取它?
我试过了:
$(tar -Oxf $tarfile $file | head -n "$NL") >> cdn.log
但是有错误说:
time(http:index: command not found
这是其中一个csv文件中的某一行。报告了所有csv文件的类似错误... 有什么想法??
答案 0 :(得分:2)
使用-O
,您可以告诉tar将文件提取到标准输出而不是文件。因此,您应该能够首先使用tar tf <YOUR_FILE>
列出归档中的文件并使用grep
过滤它来查找CSV文件,然后为每个文件使用tar xf <YOUR_FILE> <NAME_OF_CSV> -O | head
来获取文件的开头到stdout。这可能有点无效,因为您将存档解压缩为与CSV文件一样多,但应该有效。
答案 1 :(得分:0)
您可以使用perl及其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
列表来过滤您想要的内容。