У меня есть папка с несколькими CSV-файлами внутри, с постепенным названием (начиная с 00000.csv и заканчивая общим #####. Csv). Каждый файл csv имеет 4 столбца и переменное количество строк, N.
Что я хотел бы сделать, это написать какой-нибудь сценарий для размещения внутри папки и который при выполнении читает каждый файл csvфайл постепенно и на каждом шаге - для i-го файла csv - суммируйте все значения N в третьем столбце, чтобы получить значение t, а затем все значения N в четвертом столбце, чтобы получить значение q, а затемвычисляет окончательное значение sqrt (t ^ 2 + q ^ 2) и печатает его в i-й строке (например, txt) файла, который будет сгенерирован в той же папке, в которой находятся все файлы csv.
Мне бы хотелось иметь что-то автоматическое, подход типа «забей и забудь», а не просто команду, которую нужно менять каждый раз.
Следуя совету @Ed Morton, я добавилвот код, который мне удалось написать до сих пор:
#!/bin/bash
shopt -s nullglob
for f in *.csv
do
cat "$f" | awk -F "," '{sum3 += $3} {sum4 += $4} {final = sqrt(sum3^2 + sum4^2)} END {print final}' > result.txt
done
Похоже, что он каким-то образом преуспел в выполнении того, что мне нужно, но проблема в том, что он отображает только правильное значение для последнего файла CSV, поскольку он непрерывно перезаписываетPrevioнас один.
Предположим, у меня есть следующие ##### = 3 файла CSV:
00000.csv
1.817675, 0.859327, 0.959465, 0.281827
4.264659, 3.040230, -0.787732, -0.616018
3.645565, 2.943500, -0.424509, -0.905424
0.603874, 3.858309, -0.302506, -0.953147
0.056403, 0.410131, 0.941520, 0.336956
00001.csv
1.762620, 0.775846, -0.550544, -0.834806
4.364223, 3.049563, 0.995636, 0.093324
3.675804, 2.848182, 0.302385, -0.953186
0.696330, 3.820203, 0.924550, -0.381060
0.154763, 0.428169, 0.983598, 0.180376
00002.csv
1.781079, 0.677564, 0.184586, -0.982816
4.264546, 3.057596, -0.996768, 0.080330
3.718724, 2.757861, 0.429205, -0.903207
0.733074, 3.913208, 0.367446, 0.930045
0.088634, 0.353155, -0.661285, -0.750135
В конце концов я хотел бы получитьследующий файл result.txt:
result.txt
1.895572658137904
3.262622157794096
1.761036700624096
Где, например,
1.895572658137904 = sqrt [(0,959465-0,787732-0,424509-0,302506 + 0,941520) ^ 2 + (0,281827-0,616018-0,905424-0,953147 + 0,336956) ^ 2]
и т. Д. Для других значений.