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