我有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
什么是下一个最佳方法
谢谢
答案 0 :(得分:1)
这是一个bash / awk解决方案,尽管不是最有效的方法。但是很容易理解和维护。
基本上,它首先创建标题行和joined.csv
文件。然后有一个循环,可在所有csv文件中查找所有唯一的ID。然后在每个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
希望这会有所帮助!