#bash
Вопрос:
это вывод из tr ',' 'n'
. когда я преобразую это в массив для использования в цикле for, все нули удаляются, и мне нужно, чтобы они были там. Я хочу заменить все нули некоторым значением, то есть NULL, и получить из этого списка :
`
someApp
NA
All
`
All
value3
`
someVal
9999
`
к этому :
NULL
someApp
NA
All
NULL
All
value3
NULL
someVal
9999
NULL
«не выходит». Я добавил его просто для того, чтобы отметить пустые значения.
Комментарии:
1. Пожалуйста, исправьте свою терминологию. Символ новой строки не является пустой строкой, нулем или пробелом. Похоже, вы имеете в виду пустые строки . Если в этих строках могут быть пробелы, а могут и не быть, вам нужно четко это сказать.
n
является символом маркера конца строки в каждой строке, нуль-это байт всех нулей, пробел-это выделенный символ, который перемещает печатающую головку, но не генерирует никаких других выходных данных. c.f. на этой диаграмме вы просто пытаетесь отметить пустые строки? Включает ли это строки только с пробелами?
Ответ №1:
Вы можете бросить tr
и использовать perl
:
perl -lne 'print join "n", map {$_ ||= "NULL"} split(/,/, $_, -1)' file
Ответ №2:
Не могли бы вы, пожалуйста, попробовать следующее:
str=",someApp,NA,All,,All,value3,,someVal,9999,"
echo "$str" | tr ',' 'n' | sed 's/^$/NULL/'
Выход:
NULL
someApp
NA
All
NULL
All
value3
NULL
someVal
9999
NULL
Шаблон ^$
для команды sed s
соответствует пустой строке и
заменяется строкой NULL
.
Ответ №3:
Если вы просто пытаетесь пометить пустые строки, используйте
sed 's/^$/NULL/' file
Если в этих строках могут быть пробелы, и вы все еще хотите, чтобы они были отмечены,
sed 's/^ *$/NULL/' file
Ответ №4:
Если ed
доступно/приемлемо. Нет необходимости в tr
printf '%sn'
,s/,/\n/g' ',s/^$/NULL/' ,p Q | ed -s file