2016-07-15 3 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을 사용하려고 생각했지만, 그다지 익숙하지 않습니다.

내가 시도 :
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 

데이터 복사본을 만들어야합니다. 나오지도에 대한

IHTH

+0

첫 번째 줄에 "filename"을 넣고'awk '에서 사용할'fcs'의 값을'.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를 삭제할 수 있습니다. 한편, 당신이 엉망이라면, 당신은 원본을 복원 할 수 있습니다.

관련 문제