在bash中组合csv行

时间:2014-07-15 16:18:29

标签: bash csv

我想为每个城市创建新的csv文件,将几个csv与行和列组合在一起,一列具有城市名称,在所有csv文件中重复...

例如,

我的文件名为日期,YYYYMMDD,20140713.csv,20140714.csv,20140715.csv ......

它们具有相同的结构,相同的行数和列数,例如,20140713.csv ...

 1. City, Data, TMinreal, TMaxreal, TMinext, TMaxext, DiffTMin, DiffTMax
 2. Milano,20140714,19.0,28.8,18,27,1,1.8
 3. Rome,20140714,18.1,29.3,14,29,4.1,0.3
 4. Pisa,20140714,10.8,27.5,8,29,2.8,-1.5
 5. Venecia,20140714,21.1,29.1,16,27,5.1,2.1

我希望将所有这些csv文件组合在一起...并获取带有城市名称的csv文件,如Milano.csv和里面的所有csv组合存储的有关此城市的信息。

例如,如果我将20140713.csv,20140714.csv,20140715.csv合并为Milano.csv

 1. Milano,20140713,19.0,28.8,18,26,1,2.8

 2. Milano,20140714,19.0,28.8,20,27,-1,1.8

 3. Milano,20140715,21.0,26.8,19,27,2,-0.2

任何想法?谢谢

2 个答案:

答案 0 :(得分:2)

未经测试,但这应该有效:

awk -F, 'FNR==1{next} {file = $1".csv"; print > file}' 20*.csv

答案 1 :(得分:0)

你可以拥有这个bash脚本:

#!/bin/bash

for FILE; do
    {
        read  ## Skip header
        while IFS=, read -r A B; do
            echo "$A,$B" >> "$A".csv
        done
    } < "$FILE"
done

然后运行:

bash script.sh file1.csv file2.csv ...