ask() {
# $1 ---> message to user
# $2 ---> "VARIABLE NAME" in which read will store response
case ${2-} in
'' | *[!a-zA-Z0-9_]* | [0-9]* )
echo >&2 "Oops you've selected an invalid variable name: \`$2'"
exit 1;;
esac
read -p "$1" "$2"
eval "
case \${$2:++} in
'' )
echo >&2 'Empty response not allowed.'
ask '$1' '$2';;
* )
echo \"\${$2}\";;
esac
"
}
VarName=${1-'humpty_dumpty'}
ask "Provide the user database: " "$VarName"
Команда print
всегда добавляет новую строку. Таким образом, print "\n"
печатает указанную вами новую строку плюс добавленную.
Вы можете использовать print ""
или printf "\n"
.
Это связано с тем, что оператор print
по умолчанию добавляет новую строку в конец строки, которую он печатает. При использовании с \n
он печатает двойную новую строку -, как вы видите на выходе. Используйте printf
вместо
awk '{ if (NF>3) {print $4} else if (NF==1) {print $1} else printf "\n" }' file
Без явных конструкций ветвления, if..else if..else
, вы можете просто сделать
awk 'NF>3 { print $4; next } NF==1 { print $1; next } { printf "\n" }'