объедините строки к 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
0
задан 24 April 2019 в 22:02

2 ответа

Вот и вы: скрипт читает каждую строку файла file1.csv, и если в файле filecs обнаружена дата, записывает обе строки в файл 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
.
0
ответ дан 24 April 2019 в 22:02

Поскольку ваши файлы расположены в лексическом порядке в поле даты, вы можете использовать команду 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
0
ответ дан 24 April 2019 в 22:02

Другие вопросы по тегам:

Похожие вопросы: