1
私のINフォルダに500個の.xlsファイルがあります。そのフォルダには2つの異なるファイルセットがあります。 (たとえば)1つの抽出列「Package Name」を持つファイルの一部は、他のファイルには含まれません。 これで、「パッケージ名」列ファイルをUNIX上の別のフォルダに移動したいと考えています。ありがとうUnixでは列名に基づいてファイルを移動するには?
私のINフォルダに500個の.xlsファイルがあります。そのフォルダには2つの異なるファイルセットがあります。 (たとえば)1つの抽出列「Package Name」を持つファイルの一部は、他のファイルには含まれません。 これで、「パッケージ名」列ファイルをUNIX上の別のフォルダに移動したいと考えています。ありがとう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形式を処理する必要があります。そのためには、シェルが最適な環境であるかどうかは疑問です。あなたがフォーマットを変えることができれば(バッチコンバータで)、CSVは読みやすく、XLSXとオープンドキュメントフォーマットの両方が実行可能になります – Aaron
私はこのcmdを使っています...しかし、それは私の目的地パスgrepをコピーしません-rl --null - '* .xls'パッケージをインクルードします。 | xargs -0r cp -t/my path –
これはヘッダーではなく、どこでもPackageを含んでいないファイルをフィルタリングすることに気づきましたか?とにかくあなたのコマンドをデバッグするには 'cp'の前に' echo'を追加し、生成されたコマンドが正しいかどうか確認してください – Aaron