У меня есть файл, подобный этому:
ME45 P 1311 41130 1.253
ME39 P 1311 41130 7.700
ME38 P 1311 41130 7.776
ME37 P 1311 41130 8.285
ME36 P 1311 41130 8.689
ME30 P 1311 4113010.252
ME26 P 1311 4113010.486
ME29 P 1311 41130 9.598
ME28 P 1311 41130 9.356
ME21 P 1311 41130 9.911
ME20 P 1311 4113010.465
ME17 P 1311 4113010.984
, и мне нужно заменить пробел между двумя соседними числами с нулем (например, заменить пробел между вторым столбцом, где есть 1131
и третий столбец, где есть 411
с 0
), который возвращает мне желаемый результат, такой как:
KALI P 131104113008.580
IMOB P 131104113001.863
Когда я говорю пробел между двумя соседними числами, означающими, что есть только один пробел между двумя числами, и я хочу заменить это пробел на ноль.
До сих пор я использовал awk
, чтобы попытаться решить эту проблему:
awk '{gsub("1311 41130", "1311041130")}1' myfile > myfile_tmp && mv myfile_tmp myfile
но, к сожалению, файл содержит тысячи строк, и по мере изменения ряда чисел становится больно смотреть каждый блок столбца один за другим.
Моя идея решить эту проблему - перебрать ряд строк, сохранить их в переменной или массиве, проверить, существует ли элемент, содержащий пробел, и вернуть его индекс, а затем проверить, является ли соседний элемент числом или нет, используя этот индекс «пустого пространства» в качестве ссылки, а затем замените это пространство на ноль, если оно действительно имеет число 1023 * соседей. Однако я не знаю, выполнимо ли это в bash
или awk
. Я лучше понимаю Python, но каким-то образом это пустое пространство является препятствием для меня; Python может распознать это пространство как разделитель.
Есть ли способ элегантно решить эту проблему?