我有500个csv文件要加入
我将首先解释csv格式,每个csv文件都被命名为log-yyyy-mm-dd.hh:mm:ss.csv
它的结构没有列标题
eventID,number举个例子
FLAGS-2,16
DOOR6-234,800我想这样格式化这个数据
eventID,filename,filename,filename ---and so on for the 500+ files
eventID,log-2019-03-10.21:00:01.csv,log-2019-03-15.12:00:01.csv
FLAGS-2,16,54
FLAGS-3,16,9我最初考虑使用bash和awk来做这件事,但当我发现偶尔会有数据没有记录在文件中时,我放弃了。它不会存储该eventID编号
当我使用find . -name '*.csv' | xargs wc -l时
有些文件有7803行,有些文件有7800行,以此类推
因此,在一个文件中,我可以包含以下内容
FLAGS-2,16
FLAGS-3,19
FLAGS-4,02下一步
FLAGS-2,16
FLAGS-4,02下一个最好的方法是什么?
谢谢
发布于 2019-03-16 03:37:41
这里有一个bash/awk解决方案,尽管不是最有效的方法。但它足够清晰,易于理解和维护。
基本上,它首先创建标题行和joined.csv文件。然后有一个循环,用于查找所有csv文件中的所有唯一ids。然后在每个csv文件中查找每个key,并将值附加到line。最后将每个line附加到生成的joined.csv文件。
#!/bin/bash
header=eventID
for csv_file in $( ls -1 log*csv)
do
header="$header,$csv_file"
done
echo $header > joined.csv
for key in $( awk -F, '{print $1}' log*csv | sort -u )
do
line=$key
for csv_file in $( ls -1 log*csv)
do
value=$( grep $key $csv_file | awk -F, '{print $2}' )
line="$line,$value"
done
echo $line >> joined.csv
done希望这能有所帮助!
https://stackoverflow.com/questions/55187953
复制相似问题