我的问题是,仅当两个文件中都存在日期时,我才需要考虑 file3 中的行
考虑 file1.csv
dtime,c,y,s
2015-02-01,395,396,g
2015-02-02,395,397,g
2015-02-03,395,397,g
这个file2.csv
dtime,c,y,s
2015-02-01,398,397,o
2015-02-03,399,397,o
合并 file3.csv 应该包含
dtime,c,y,s
2015-02-01,395,396,g
2015-02-01,398,397,o
2015-02-03,395,397,g
2015-02-03,399,397,o
答案1
这里是:脚本读取 file1.csv 的每一行,如果在 file2.csv 中找到日期,则将两个字符串写入 file3.csv
#!/usr/bin/env bash
while IFS="" read -r string1 || [ -n "$string1" ]
do
date=$(cut -d',' -f1 <<< "$string1")
string2=$(grep "$date" file2.csv)
if [[ "$string2" ]]; then
echo "$string1" >> file3.csv
echo "$string2" >> file3.csv
fi
done < file1.csv
答案2
由于您的文件是按日期字段的词汇顺序排列的,因此您可以使用该join
命令 - 尽管需要进行一些调整才能获得所需的输出格式:
前任。
$ join --header -t, -o0,1.2,1.3,1.4,0,2.2,2.3,2.4 file1.csv file2.csv |
sed -e '1s/,dtime.*//' -e 's/,/\n/4'
dtime,c,y,s
2015-02-01,395,396,g
2015-02-01,398,397,o
2015-02-03,395,397,g
2015-02-03,399,397,o