
Меня попросили написать команду, которая добавляет n-ную строку ( MYN
) из файла ( x
) в другой файл ( y
). Вот что я сделал на данный момент:
MYN=4
hey=$(awk 'NR==$MYN' x)
echo "$hey" >> y
Но почему это не работает?
решение1
Если ваша цель — передать переменную для awk
использования ее в скрипте, вы можете использовать awk
опцию -v
:
hey=$(awk -v MYN=$MYN 'NR==MYN' x)
решение2
Я вижу вашу проблему, вы используете одинарные кавычки. Они не позволяют переменной Bash $MYN
расширяться. Вы можете усложнить ситуацию, указав awk
новую переменную, или, поскольку это так просто, вы можете просто перейти на двойные кавычки:
awk "NR==$MYN" x
Я бы имелиспользовалsed
но я не вижу никаких очевидных проблем с вашей логикой
MYN=4
sed "${MYN}q;d" x >> y
Кажется, все работает так, как и ожидалось:
$ for i in $(seq 1 10); do echo $i >> x; done
$ sed "${MYN}q;d" x
4