我想在多个(500个)CSV文件(相同维度)中添加一列。每列应充当单个文件的标识符。我想用awk创建一个bash脚本(我是awk中的新蜜蜂)。 CSV文件带有标题。
例如。
输入File1.csv
#name,#age,#height
A,12,4.5
B,13,5.0
输入File2.csv
#name,#age,#height
C,11,4.6
D,12,4.3
我想添加一个新列"#ID"在两个文件中,ID的值对于单个文件是相同的,但对于文件都不相同。
预期产出
File1.csv
#name,#age,#height,#ID
A,12,4.5,1
B,13,5.0,1
预期File2.csv
#name,#age,#height,#ID
C,11,4.6,2
D,12,4.3,2
请建议。
答案 0 :(得分:1)
如果您不需要从文件名中提取ID号,则应该这样做。
$ c=1; for f in File*.csv;
do
sed -i '1s/$/,#ID/; 2,$s/$/,'$c'/' "$f";
c=$((c+1));
done
请注意,这是就地编辑。也许先做备份或测试。
<强>更新强> 如果您不需要更新单个文件,这可能会更适合您
$ awk -v OFS=, 'BEGIN {f="allFiles.csv"}
FNR==1 {c++; print $0,"#ID" > f; next}
{print $0,c > f}' File*.csv
答案 1 :(得分:0)
awk -F, -v OFS=, ‘
FNR == 1 {
$(NF + 1) = “ID#”
i++
f = FILENAME
sub(/Input/, “Output”, f)
} FNR != 1 {
$(NF + 1) = i
} {
print > f
}’ Input*.csv
答案 2 :(得分:0)
使用GNU awk进行就地编辑和ARGIND:
awk -i inplace -v OFS=, '{print $0, (FNR==1 ? "#ID" : ARGIND)}' File*.csv