Однажды я нашел ответ на Github , который решил проблему, постоянно пытаясь пропинговать сервер. Только когда проходит пинг, служба продолжается:
[Service]
ExecStartPre=/bin/sh -c 'until ping -c1 google.com; do sleep 1; done;'
ExecStart=
Я заменил google.com
своим собственным сервером, потому что моему основному скрипту нужно было подключиться к моему серверу.
Использование csvformat
из csvkit:
$ csvformat -D ';' file | tr,. | csvformat -d ';'
ID,PRICE,QUANTITY,ARRIVAL
01299,41.5,1,0
26528,412.03,0,0
38080,2.35,0,0
38081,2.35,0,0
Приведенная выше команда изменяет разделитель CSV с запятой по умолчанию на двоеточие с запятой -. Затем он меняет все оставшиеся запятые на точки, прежде чем снова заменить разделитель полей на запятую.
В качестве альтернативы можно преобразовать CSV в JSON с помощью csvjson
и изменить данные с помощью jq
:
$ csvjson -I file | jq -r '(.[0] | keys_unsorted | @csv), (map(.PRICE |= sub(",";".") | [.[]] | @csv)[])'
"ID","PRICE","QUANTITY","ARRIVAL"
"01299","41.5","1","0"
"26528","412.03","0","0"
"38080","2.35","0","0"
"38081","2.35","0","0"
Передайте это черезcsvformat
(без аргументов ), если хотите удалить ненужные кавычки.
Выражение jq
сначала выводит заголовок, беря ключи из первого объекта во входном массиве. Затем он изменяет поле PRICE
каждого элемента (, заменяет запятую точкой )и форматирует значения как CSV для вывода.
Разница в эффекте между этим вторым вариантом и первым заключается в том, что мы всегда воздействуем только на столбец PRICE
. Любые встроенные запятые в любом другом поле останутся нетронутыми.
Для справки, документ JSON, который jq
получает в качестве входных данных от csvjson
, учитывая данные CSV в вопросе, будет
[
{"ID":"01299","PRICE":"41,5","QUANTITY":"1","ARRIVAL":"0"},
{"ID":"26528","PRICE":"412,03","QUANTITY":"0","ARRIVAL":"0"},
{"ID":"38080","PRICE":"2,35","QUANTITY":"0","ARRIVAL":"0"},
{"ID":"38081","PRICE":"2,35","QUANTITY":"0","ARRIVAL":"0"}
]
Настройка этого ответа на Удалить запятую между кавычками только в файле с разделителями-запятыми для решения awk
:
awk -F'"' -v OFS='"' '{ for (i=2; i<=NF; i+=2) gsub(",", ".", $i) } 1' infile
где infile
это
ID,PRICE,QUANTITY,ARRIVAL
01299,"41,5",1,0
26528,"412,03",0,0
38080,"2,35",0,0
38081,"2,35",0,0
и результат
ID,PRICE,QUANTITY,ARRIVAL
01299,"41.5",1,0
26528,"412.03",0,0
38080,"2.35",0,0
38081,"2.35",0,0
Объяснение кода такое же, как и в упомянутом ответе, поэтому я не буду его повторять, за исключением того, что:
"
(, т.е. OFS='"'
), вместо ничего (, т.е. OFS=''
), и; gsub
теперь меняет запятую(","
)на точку("."
)вместо ничего(""
)