我在目录中有一组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 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
Gee,附加到每一行的开头对于sed来说非常简单。
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。同时,如果你陷入困境,你可以恢复原件。