-2

私はいたるところを見てきましたが、あまり運がありません。簡単な自動請求レポートを作成しようとしています。3列のCSVを作成する必要があります。このような

Folder   Size   Billing Code
Folder1  300M   XXXXX
Folder2  600M   XXXXX
Folder3  200M   XXXXX

私はそれを自分の好きなようにアレンジするdu -shために使用awkすることができ、私がやろうとしていることのほとんどを手に入れることができます。ただし、各列の前にヘッダーを作成する方法がわかりません。私はbash、perl、およびpythonのメソッドを探しましたが、成功は限られていました。列ヘッダーラベルの作成方法がわかれば、そこからは問題ないと思います。

4

3 に答える 3

4

Pythonでcsv モジュールを試してください。具体的には、 writeheader() メソッドが必要です。これは非常に簡単です。

または、シェル スクリプトで既にこれを実行している場合は、最初にヘッダー行をファイルにエコーしてから、後続のコマンドで追加演算子 ( >> ) が使用されるようにします。

于 2013-01-05T00:06:21.030 に答える
3

値をレンダリングした後に名前を追加するのはどうですか?

$ sed 1i"This is the first line" - < /proc/loadavg
This is the first line
3.14 3.48 3.58 2/533 17661
于 2013-01-05T00:17:48.477 に答える
1

perl を使用したアプローチ:

#!/usr/bin/perl

use strict;
use warnings;
use File::Find;

open my $fh, '>:encoding(utf8)','your outfile.csv';

# write the first line with the column names
print $fh "Folder,Size,Billing Code\n";

# Do your folder calculations
my $dirpath = "/your/path";
my $bytes;
find(\&folders,$dirpath);
close $fh;

sub folders {
    if (-d $_) {
        $bytes = 0;
        find(\&size,$_);
        $bytes = $bytes/1_048_576; # Convert Bytes to Mega Bytes
        print $fh $_.",".$bytes."M,your_billing_code \n";
    }
}

sub size {
    if(-f $_){
        $bytes += -s _; # This is not a typo
                        # -X _ does a filesystem operation on the 
                        # last used stat structure
                        # this saves new filesystem calls and therefore performance
                        # see http://perldoc.perl.org/functions/-X.html for more info
    }
}

これにより、du などの外部コマンドを使用せずに CSV ファイルが書き込まれ、すべてのプラットフォームで機能します。その他のオプションについては、Perl の CSV モジュールも確認してください。

于 2013-01-05T03:37:44.817 に答える