используя awk с опцией if и z

С zsh:

zmodload zsh/mapfile
setopt extendedglob # best in ~/.zshrc

for f (Dir/**/(^*DontTouch).txt(N.)) 
  mapfile[$f]=$mapfile[theCommonComment.txt]$mapfile[$f]
-1
05.02.2019, 09:56
3 ответа

Как уже говорили другие, в awkнет теста -z, а тест -zв оболочке проверяет пустые строки, а не целые числа.

В awkвы должны сделать следующее, чтобы проверить, является ли переменная пустой (и вывести ноль, если это так, или ее значение, если это не так):

if (value == "")
    print 0
else
    print value

или,

print (value == "" ? 0 : value)

Например:

$ awk -F '\t' '{ print ($1 == "" ? 0 : $1) }' file

для печати нуля для тех строк, первая вкладка -которых разделяет значение во вводе пустым, и фактическое значение в противном случае.

Возможно, связано (, если вы хотите найти тип переменной вawk):

1
28.01.2020, 05:07

попробуй

/bin/awk '{if( x$1 == x){print "0"}else{print $1}}' script  

в awk нет опции -z.

0
28.01.2020, 05:07

-zв оболочке не будет указано, является ли значение целым или нет, а будет ли его длина > 0.

Вы можете сделать то же самое в awk с помощьюlength--if(length($1))...

Если вы хотите проверить, является ли переменная или поле числом или нет в awk, вы можете сделать это:

 if($1+0 || $1~/^[+-]?0/)...

Ваше выражение if(-z $1)просто инвертирует неустановленную переменную z, что даст 0, а затем добавит 0к полю $1, создав непустую -строку, которая будет всегда считается TRUE, , даже если$1была пустой строкой ""или числом 0.

2
28.01.2020, 05:07

Теги

Похожие вопросы