Я немного разбираюсь в различиях между GNU sed и BSD sed. К сожалению, у меня нет Linux-машины, доступен только Mac.BSD sed не может заменить все «, 0»,
У меня есть большой файл данных в формате csv, разделенный запятой. Даже первые две строки файла слишком велики для публикации здесь, вы можете найти первые две строки here.
Мне нужно заменить значения «0,8,9», -999, -999.0 на «NA», поскольку эти значения являются кодами для отсутствующих значений.
Я использовал следующую команду в патч в Баш строке
sed -e 's/\-999\.?\0?/NA/g' \
-e 's/\-999/NA/g' \
-e 's/,9,/,NA,/g' \
-e 's/,8,/,NA,/g' \
-e 's/,0,/,NA,/g' \
firsttwolines.csv
Результат выглядит отлично, за исключением все еще существует единого 0
. Как это исправить? И как поместить его в сценарий bash? Есть ли лучший способ выполнить эту задачу?
Я предполагаю, что ваш вклад содержит ', 0,0,', и ваш вывод содержит ', NA, 0,'? Если это так - это потому, что каждая замена ', 0,' может начинаться только после позиции, где предыдущая замена ', 0,' уходит. – ruakh
Действительно! Как бороться с ', 0,0,' то? –
Если никакое значение, отличное от 0, не может начинаться с 0, тогда просто ', 0' => ', NA' – stark