2017-04-11 23 views
1

我在我的IN文件夾中有500個.xls文件..在那個文件夾中我有兩組不同的文件。 對於(例如)一些文件有一個提取列「包名」,其他文件不會有。 所以現在我想通過unix將「Package Name」列文件移動到某個單獨的文件夾中。謝謝如何在Unix中根據列名移動文件?

+0

您將首先需要一些東西來處理XLS格式,並且我懷疑shell是否是該選擇的環境。如果你可以改變格式(也許用一個批量轉換器),CSV將會很容易閱讀,並且XLSX和打開的文檔格式都是可行的 – Aaron

+0

我正在使用此cmd ...但它不會複製我的目標路徑grep -rl --null --include'* .xls'包。 | xargs -0r cp -t /我的路徑 –

+0

你知道,這將過濾不包含任何地方Package的文件,而不僅僅是在標題中,對嗎?無論如何,要調試你的命令,在'cp'前加'echo'並檢查生成的命令是否正確 – Aaron

回答

1

您可以使用Perl模塊Spreadsheet::Read解析電子表格。在Ubuntu上,你必須安裝模塊。

apt-get install libspreadsheet-read-perl 

以下代碼是用於電子表格一個非常簡單的grep:

#! /usr/bin/perl 
use strict; 
use warnings; 
use Spreadsheet::Read; 

my $book = ReadData ($ARGV[1]); 
my @row = Spreadsheet::Read::row ($book->[1], 1); 

for my $cel (@row) 
{ 
    exit 0 if $cel eq $ARGV[0]; 
} 
exit 1; 

如果搜索字符串是電子表格的第一行中,該程序用0和以其他方式與返回1

我已使用以下電子表格進行測試。

Example spreadsheet

通過上述程序,你可以通過你的文件循環。

for f in *.xlsx; do 
    if spreadsheet-grep 'Package Name' "$f"; then 
    mv "$f" /tmp/. 
    fi 
done 
相關問題