仅当两个文件中都按日期和月份的排序顺序出现时,才将行合并到 file3

仅当两个文件中都按日期和月份的排序顺序出现时,才将行合并到 file3

我的问题是,仅当两个文件中都存在日期时,我才需要考虑 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

相关内容