Чтобы упростить решение, а также из-за того, что ваши строки заголовка не согласованы (новая строка во входном файле и неправильный разделитель ~
в выходном файле ), давайте предположим, что ваш входной файл не содержит строки заголовка.
Можно решить задачу в два шага:
Создайте файл checksums.csv
, нам нужен только путь к файлу:
awk -F'~' '{ system("cksum /opt/xyz"substr($2,8)) }' file.csv > checksums.csv
substr($2,8)
удаляет префикс store:/
, а /opt/xyz
добавляется для завершения пути. Команда system(…)
выполняет команду cksum
по заданному пути, и вывод перенаправляется в выходной файл.
Пример вывода будет выглядеть так:
$ cat checksums.csv
128361894 41 /opt/xyz/2018/7/20/11/35/3f176f4b-41a0-4ac4-a795-a2240ffbb7b9.bin
820470222 41 /opt/xyz/2018/7/20/11/35/4302b390-1134-424d-a92f-ad27b233e8c1.bin
1593587341 41 /opt/xyz/2018/7/20/11/35/5ff59679-b3ec-46d2-aa7d-5ec28eff6fe9.bin
Поскольку выходные данные содержат контрольную сумму трех столбцов, количество байтов и путь, нам нужно извлечь столбцы три и один на следующем шаге.
Напечатайте строку заголовка и объедините столбец 1 (имя файла )из file.csv
с столбцом 3 (путь )и столбец 1 (контрольная сумма )из checksums.csv
.
{ echo "filename contenturl checksum";\
paste -d ' ' <(awk -F'~' '{ print $1 }' file.csv) <(awk '{ print $3,$1 }' checksums.csv);\
} > newfile.csv
Пример вывода:
$ cat newfile.csv
filename contenturl checksum
000224.pdf /opt/xyz/2018/7/20/11/35/3f176f4b-41a0-4ac4-a795-a2240ffbb7b9.bin 128361894
000238.pdf /opt/xyz/2018/7/20/11/35/4302b390-1134-424d-a92f-ad27b233e8c1.bin 820470222
000262.pdf /opt/xyz/2018/7/20/11/35/5ff59679-b3ec-46d2-aa7d-5ec28eff6fe9.bin 1593587341
Затем очистить:
rm checksums.csv
Пусть magic _cmd сохранит порядковый номер и отправит "select $seqno;" в mysql перед каждой командой. Направьте вывод mysql в файл, который впоследствии вы сможете проверить на наличие ошибок.