2013-01-04 6 views
-2

나는 어디에서나 보았고 나는 많은 행운이 없다고 생각합니다. 간단한 자동 청구 리포트를 작성하려고합니다. 3 열로 CSV를 만들어야합니다. 이폴더 크기 보고서를 CSV로

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

처럼 나는 du -sh을 얻고 내가 원하는 나는 내가 할 시도하고있는 무슨의 대부분을 얻을 방법을 마련하기 위해 awk를 사용할 수 있습니다. 그러나 각 열 앞에 머리글을 만드는 방법을 모르겠습니다. 나는 bash, perl 및 python에서 메소드를 찾고 제한된 성공을했습니다. 열 머리글 레이블을 만드는 방법을 알아낼 수만 있다면 거기에서 괜찮을 것입니다.

답변

4

csv module을 파이썬으로 시도해보십시오. 특히, writeheader() 메소드가 필요할 것입니다. 매우 간단합니다.

쉘 스크립트에서이 작업을 이미 수행 한 경우 헤더 행을 먼저 파일에 에코시킨 다음 후속 명령에 추가 연산자 (>>)를 사용하지 않는 것이 좋습니다.

4

값을 렌더링 한 후에 이름을 추가하는 방법은 무엇입니까?

$ sed 1i"This is the first line" - < /proc/loadavg 
This is the first line 
3.14 3.48 3.58 2/533 17661 
+0

흠, 대시가 중복 될 수 있지만 분명히 잘 작동합니다 (: – jary

1

펄과 접근 방법 :

#!/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 
    } 
} 

이것은 뒤 같은 외부 명령없이 CSV 파일을 작성하고 모든 플랫폼에서 작동합니다. 더 많은 옵션을 보려면 Perl의 CSV 모듈도 확인하십시오