2017-04-11 9 views
1

私のINフォルダに500個の.xlsファイルがあります。そのフォルダには2つの異なるファイルセットがあります。 (たとえば)1つの抽出列「Package Name」を持つファイルの一部は、他のファイルには含まれません。 これで、「パッケージ名」列ファイルをUNIX上の別のフォルダに移動したいと考えています。ありがとうUnixでは列名に基づいてファイルを移動するには?

+0

まず、XLS形式を処理する必要があります。そのためには、シェルが最適な環境であるかどうかは疑問です。あなたがフォーマットを変えることができれば(バッチコンバータで)、CSVは読みやすく、XLSXとオープンドキュメントフォーマットの両方が実行可能になります – Aaron

+0

私はこのcmdを使っています...しかし、それは私の目的地パスgrepをコピーしません-rl --null - '* .xls'パッケージをインクルードします。 | xargs -0r cp -t/my path –

+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 
関連する問題