1
我在我的IN文件夾中有500個.xls文件..在那個文件夾中我有兩組不同的文件。 對於(例如)一些文件有一個提取列「包名」,其他文件不會有。 所以現在我想通過unix將「Package Name」列文件移動到某個單獨的文件夾中。謝謝如何在Unix中根據列名移動文件?
我在我的IN文件夾中有500個.xls文件..在那個文件夾中我有兩組不同的文件。 對於(例如)一些文件有一個提取列「包名」,其他文件不會有。 所以現在我想通過unix將「Package Name」列文件移動到某個單獨的文件夾中。謝謝如何在Unix中根據列名移動文件?
您可以使用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
我已使用以下電子表格進行測試。
通過上述程序,你可以通過你的文件循環。
for f in *.xlsx; do
if spreadsheet-grep 'Package Name' "$f"; then
mv "$f" /tmp/.
fi
done
您將首先需要一些東西來處理XLS格式,並且我懷疑shell是否是該選擇的環境。如果你可以改變格式(也許用一個批量轉換器),CSV將會很容易閱讀,並且XLSX和打開的文檔格式都是可行的 – Aaron
我正在使用此cmd ...但它不會複製我的目標路徑grep -rl --null --include'* .xls'包。 | xargs -0r cp -t /我的路徑 –
你知道,這將過濾不包含任何地方Package的文件,而不僅僅是在標題中,對嗎?無論如何,要調試你的命令,在'cp'前加'echo'並檢查生成的命令是否正確 – Aaron