Ты что-то забыл?Ваш awk
не имеет явного ввода, замените его следующим образом:
while IFS= read -r read line || [ -n "$line" ]
do
varline=$(echo "$line" | awk '/.mp3/{print "yes";next}{print "no"}')
echo $varline
if [ "$varline" == "yes" ]; then
some-command
else
some-other-command
fi
done < file.txt
В этом случае вам может потребоваться изменить значение на /\.mp3$/
или /\.mp3[[:space:]]*$/
для точного соответствия.
Потому что .
будет соответствовать любому символу, например, /.mp3/
также будет соответствовать Exmp3but.mp4
.
Обновление: изменено while read line
на while IFS= read -r read line
, чтобы сохранить содержимое каждой строки без изменений при назначении переменной.
И часть awk
может быть улучшена до:
awk '{print $0~/\.mp3$/ ? "yes":"no"}'
Так что только с awk
вы можете сделать это так:
awk '{print $0~/\.mp3$/ ? "yes":"no"}' file.txt
Или если ваша цель простоКоманды в структуре if, вы можете просто сделать это:
awk '/\.mp3$/{system("some-command");next}{system("some-other-command");}' file.txt
или это:
awk '{system($0~/\.mp3$/ ? "some-command" : "some-other-command")}' file.txt