С zsh
:
zmodload zsh/mapfile
setopt extendedglob # best in ~/.zshrc
for f (Dir/**/(^*DontTouch).txt(N.))
mapfile[$f]=$mapfile[theCommonComment.txt]$mapfile[$f]
Как уже говорили другие, в awk
нет теста -z
, а тест -z
в оболочке проверяет пустые строки, а не целые числа.
В awk
вы должны сделать следующее, чтобы проверить, является ли переменная пустой (и вывести ноль, если это так, или ее значение, если это не так):
if (value == "")
print 0
else
print value
или,
print (value == "" ? 0 : value)
Например:
$ awk -F '\t' '{ print ($1 == "" ? 0 : $1) }' file
для печати нуля для тех строк, первая вкладка -которых разделяет значение во вводе пустым, и фактическое значение в противном случае.
Возможно, связано (, если вы хотите найти тип переменной вawk
):
попробуй
/bin/awk '{if( x$1 == x){print "0"}else{print $1}}' script
в awk нет опции -z
.
-z
в оболочке не будет указано, является ли значение целым или нет, а будет ли его длина > 0.
Вы можете сделать то же самое в awk с помощьюlength
--if(length($1))...
Если вы хотите проверить, является ли переменная или поле числом или нет в awk
, вы можете сделать это:
if($1+0 || $1~/^[+-]?0/)...
Ваше выражение if(-z $1)
просто инвертирует неустановленную переменную z
, что даст 0
, а затем добавит 0
к полю $1
, создав непустую -строку, которая будет всегда считается TRUE, , даже если$1
была пустой строкой ""
или числом 0
.