我有一個tar文件,裏面有很多csv文件。 如何獲取每個csv文件的前幾行而不提取它?如何從tar文件中的csv文件中提取前幾行而不在linux中解壓縮?
我想:
$(tar -Oxf $tarfile $file | head -n "$NL") >> cdn.log
,但得到錯誤說:
time(http:index: command not found
這是CSV文件中的一個部分行。所有csv文件都會報告類似的錯誤... 任何想法?
我有一個tar文件,裏面有很多csv文件。 如何獲取每個csv文件的前幾行而不提取它?如何從tar文件中的csv文件中提取前幾行而不在linux中解壓縮?
我想:
$(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
以使文件開始到stdout。這可能有點無效,因爲您將存檔與CSV文件一樣多地解壓縮,但應該可以工作。
我試過這個。 在$文件(焦油-tf 「$ tar文件」) 做 cdn.log = $(焦油-Oxf $ tar文件$文件|頭-n 「$ NL」) 做 其中NL是行數...但沒有工作 – user1407668
我試過 $(tar -Oxf $ tarfile $ file | head -n「$ NL」)>> cdn.log 但是有錯誤說... time(http:index:command not發現 「時間(http:索引:」這是一些行在csv文件.... 任何想法?? – user1407668
它只是不能像你說的那樣,請張貼你的完整腳本。這只是輕微的不同 - 我有一種感覺,你做了一件完全錯誤的事情。 – keltar
您可以使用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
列表來過濾你想要的。
這是正確的,你正在嘗試評估幾個第一行文件。刪除$()。 – keltar
要詳細說明@keltar所說的話,說'tar -Oxf $ tarfile $ file |頭-n「$ NL」>> cdn.log' – devnull
很好....它的工作.....非常感謝@keltar – user1407668