Я хочу прочитать ниже два файла csv построчно (первый столбец) и записать их в другой report.csv. Возьмите строку из первого столбца без расширения (.json) и найдите строку в другом файле без расширения (_SUCCESS.csv, _ERROR.csv, INPROCESS.csv) и, если обнаружите, обновите tenter code here
he report.csv, указав имя входного файла и имя выходного файла. со статусом (УСПЕХ, ОШИБКА, ВХОД, Not_Found)
**Input files**
**Processed_files.csv**
**Input File Name,Start Date**
Out_ch_pc_88882.77.json,2018/10/26 16.38.54
Out_pc_fh_42652.48.json,2018/10/26 16.38.54
Out_pc_kl_55684.37.json,2018/10/26 17.38.54
Out_pc_gl_34454.66.json,2018/10/27 12.38.54
**Responsed_File_Name.csv**
**Output File Name,End Time/Date**
Out_ch_pc_88882.77_SUCCESS.csv,2018/10/30 14.53.26
Out_pc_fh_42652.48_ERROR.csv,2018/10/26 17.40.44
Out_pc_kl_55684.37_INPROCESS.csv,2018/10/26 18.55.14
**Output files**
**Input File Name,Start Date,Output File Name,End Time/Date,Status**
Out_ch_pc_88882.77.json,2018/10/26 16.38.54,Out_ch_pc_88882.77_SUCCESS.csv,2018/10/30 14.53.26,SUCCESS
Out_pc_fh_42652.48.json,2018/10/26 16.38.54,Out_pc_fh_42652.48_ERROR.csv,2018/10/26 17.40.44.ERROR
Out_pc_kl_55684.37.json,2018/10/26 17.38.54,Out_pc_kl_55684.37_INPROCESS.csv,2018/10/26 18.55.14,INPROCESS
Out_pc_gl_34454.66.json,2018/10/27 12.38.54,,Not_Found
I tried below script unable get thru.
Request your kind help.
Processed_File=/test/Processed_Files.csv
ReportFile=Report.csv
LoopCounter=0
while IFS=, read -r f1 f2
do
if [ $LoopCounter != 0 ]
then
printf '%s' $f1 >> $ReportFile
printf '%s' , >> $ReportFile
printf '%s' $f2 >> $ReportFile
printf '%s' , >> $ReportFile
printf '%s' , >> $ReportFile
printf '%s\n' , >> $ReportFile
#printf '\n' >> $ReportFile
else
printf '%s' Input File >> $ReportFile
printf '%s' , >> $ReportFile
printf '%s' Start Date >> $ReportFile
printf '%s' , >> $ReportFile
printf '%s' Response File Name>> $ReportFile
printf '%s' , >> $ReportFile
printf '%s' End Date >> $ReportFile
printf '%s' , >> $ReportFile
printf '%s\n' Status>> $ReportFile
fi
let LoopCounter=LoopCounter+1
done <$Processed_File
Можете ли вы отредактировать вопрос и поместить его туда, чтобы он был более читабельным?
Я добавил рассматриваемый сценарий. Пожалуйста помоги.
Попробуй это:
awk -F',' 'NR==FNR&&NR>1{split($1,b,"."); split(b[2],status,"_"); map[b[1]"."status[1]]=$0","status[2]} NR!=FNR&&FNR>1{split($1,a,"."); search_string=a[1]"."a[2]; if (search_string in map) {map[search_string]=$0","map[search_string]} else {map[search_string]=$0",,Not_Found"}} END{print "Input File Name,Start Date,Output File Name,End Time/Date,Status"; for (i in map) print map[i]}' Responsed_File_Name.csv Processed_files.csv > Report.csv
Имя входного файла, дата начала, имя выходного файла, время / дата окончания, статус
Отредактировал ответ.
Когда я изменяю данные, они не дают правильного вывода Processed_files.csv Имя входного файла, дата начала OutwardHSNSummary_2292_3532_09_2018_31102018033553.035.json, 31/10/31 15.35.58
Responsed_File_Name.csv Имя выходного файла, время / дата окончания Исходящий HSNSummary_2292_3532_09_2018_31102018033553.035_SUCCE SS.csv, 2018/10/31 15.42.31
Отчет (не в надлежащем формате) Имя входного файла, дата начала, имя выходного файла, время / дата окончания, состояние Outward HSNSummary_2292_3532_09_2018_31102018033553.035_SUCCE SS.csv, 2018/10/31 15.42.31,2018 Outward 31.10.2018 15.35.58`` Not_Found
Отредактировал ответ. Попробуй сейчас. Проблема возникла из-за измененных индексов во входных данных. Попробовали сейчас разобраться с этим в более общем плане.
Привет, мне нужна ваша помощь в приведенном выше коде awk, я добавил еще два столбца во входной файл STN, Sec, имя входного файла, дату начала, и теперь я хочу, чтобы первые два столбца были такими, как в отчете, и оставались такими же, как раньше .
Спасибо, он работал с приведенным ниже кодом. awk -F ',' 'NR == FNR && NR> 1 {split ($ 1, b, "."); split (b [2], статус, "_"); map [b [1] "." status [1]] = $ 0 "," status [2]} NR! = FNR && FNR> 1 {split ($ 1, a, "."); search_string = c [1] "." c [2]; if (search_string на карте) {map [search_string] = $ 0 "," map [search_string]} else {map [search_string] = $ 0 ",, Not_Found"}} END {print "STN, Sec, введите имя файла, дату начала , Имя выходного файла, время / дата окончания, статус "; for (i in map) print map [i]} 'Responsed_File_Name.csv Processed_files.csv> Report.csv
Я не вижу твоего сценария.