2016-07-15 19 views
-1

ディレクトリに291 csvのファイルがあります。私がしたいのは、ファイルの先頭に列を追加することです。その列の内容はファイル名です。そうですね:ディレクトリ内のすべてのファイルにファイル名の列を追加する

filename, ID, Mag, Magerr, RA, Decl, MJD, Blend 
CSSJ235751.9+065855, 12302, 223, 34, 23.423, 23.54, 8723, 0, 

ここで、filenameは追加したい新しい列です。そして、私はディレクトリにあるすべてのファイルにこれをします。私はawkまたはsedをこのために使用することを考えていましたが、私はあまりよく分かりません。

私が試した:1のために働い

awk '{print "CSSJ235751.9+065855,"$0}' CSSJ235751.9+065855.csv > modCSSJ235751.9+065855.csv; 

を。どのように私は一般化するので、私はすぐにすべてのファイルを行うことができますか?

答えて

0
cd /path/to/csvFiles 
for f in *.csv ; do 
    awk -v fName="${f%.csv}" '{printf("%s,%s\n", (FNR==1 ? "filename" : fName), $0)}' "$f" > mod"$f" 
done 

データのコピーを作成してください。 sedのため

IHTH

+0

私は最初の行に "filename"を入れ、 'awk'で使用される' fname'の値に '.csv'拡張子を取り除くスクリプトを修正しました。 – shellter

0
awk ' 
BEGIN { FS=OFS=", " } 
FNR == 1 { 
    fname = FILENAME 
    out = "mod" FILENAME 
    sub(/\.csv$/,"",1,fname) 
    print "filename", $0 > out 
    next 
} 
{ print fname, $0 > out } 
' *.csv 
0

ジーは、各行の先頭に追加することは十分に単純です。

for f in *.csv 
do 
    sed "1 s/^/filename,/; 2,$ s/^/${f%.*},/" f > f.new 
    mv f f.old && mv f.new f 
done 

上記のコメントでは、ファイル名fが展開され、.csv拡張子が削除されています。あなたが望むものがあれば、* .oldを削除することができます。その間に、あなたが台無しにすると、オリジナルを復元することができます。

関連する問題