我有几千个CSV文件。它们都具有相同的结构和标题。我想在文件的末尾添加一列。我找到了几个为该列添加列和值的解决方案,但我没有找到任何为该新列添加标题的内容。例如,我有1001.csv,1002.csv,1003.csv等文件。
Contents of 1001.csv
ID,URL
1,one.com
2,two.com
我想像这样修改它
ID,URL,FILE
1,one.com,1001
2,two.com,1001
由于我有大量这样的文件,我不想在添加列时弄乱数据。另外,如果可以在适当的位置更新,我也不想生成额外的文件。
答案 0 :(得分:0)
我在大量文件上对此进行了测试,但效果非常快。此代码首先删除标题,然后向列添加列加值,最后返回标题。
#!/bin/bash
# How to run $ ./this-script.sh inputdir/
# here inputdir contains all csv files
# input argument is dir name
DIRNAME=`basename $1`
# go to target directory
cd $DIRNAME
# get list of all csv files
csvfiles=`ls *.csv`
for FILENAME in $csvfiles
do
echo $FILENAME
# filename without extension
CODE="${FILENAME%.*}"
echo $CODE
## remove header
tail -n +2 "$FILENAME" > "$FILENAME.tmp" && mv "$FILENAME.tmp" "$FILENAME"
## add new field at the end
sed "s/$/,$CODE/" "$FILENAME" > "$FILENAME.tmp2"
## add header with new column name
# keep filename.bak as a backup for safety
sed -i.bak 1i"id,url,file" "$FILENAME.tmp2"
# if all good then remove temp files
rm "$FILENAME"
rm "$FILENAME.tmp2.bak"
# rename output file to original name
mv "$FILENAME.tmp2" "$FILENAME"
done
# go back to parent directory
cd ..