linux - 如何使用 bash 读取多个 CSV 文件并将它们正确附加到另一个文件?
问题描述
所以我一直在尝试制作一个程序来读取 5 个 CSV 文件的内容,名为 export n .csv。这些文件的内容需要放在一个名为merge.csv的输出文件中。我变得很困惑exec
,因为我不知道该放在哪里。这是代码:
#!/bin/bash
tc=1
for file_index in `ls export*.csv`
do
if [ $tc -eq 1 ]; then
fline=`head -1 export1.csv`
echo $fline > merged.csv
let "tc++"
else
sed 1d | while read riga; do
echo "$riga,$file_index" >> merged.csv
done < $file_index
fi
done
问题是我不知道在哪里exec
正确放置。必须跳过第一行(第一次除外),因为merge.csv应该将第一行作为字段描述。CSV 文件的结构是这样的:第一行是姓名、姓氏、产品代码,然后是数据。但是我怎样才能正确地循环它们呢?
解决方案
试试这个:
#!/bin/bash
HEADER="name,surname,product_code" # define header
MERGED="merged.csv" # define output file
echo $HEADER > $MERGED # write header in output file
for csv in export*.csv; do # run over all csv's
sed "/$HEADER/d" $csv >> $MERGED # remove first line, append to output file
done
推荐阅读
- parsing - 从sybase中的数字中删除逗号
- angular - ng serve 上的 Angular i18n 配置
- python - 使用 Selenium webdriver Python 打开 Instagram
- java - 如何优雅地结束 spring @Schedule 任务?
- bash - 使用 Bash 在两个文件之间逐列合并
- mysql - 多个外键或多个表?
- javascript - 是否可以在 js 中创建一个不和谐的机器人,从邀请链接或服务器 ID 获取服务器的成员数?
- powerbi - 该表达式引用多个列。不能将多列转换为标量值。电源BI
- c# - Asp.Net 核心身份 - UserManager.Users.Any() 总是返回 false
- postgresql - Doctrine Join 与复合键