Как передать результат команды в опцию - <character><argument>? (Без пробелов) - PullRequest
3 голосов
/ 22 мая 2009

У меня есть этот набор команд:

grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'

Это говорит мне предыдущую строку о том, где он впервые находит звездочки. Теперь я хочу получить предыдущие строки:

head -n<that previous line number>

Для заголовка требуется число, следующее сразу за аргументом -n, без пробелов, например:

head -n4

Как я могу это сделать? Просто не примет добавление

| head -n

в конце набора команд. Мои поиски были бесплодными. Спасибо!

Ответы [ 3 ]

4 голосов
/ 22 мая 2009

Вы хотите, чтобы обратные тики заменяли значение:

head -n`grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'` file.txt

Или, возможно, что-то похожее на несколько строк:

LINENO=`grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}'`
head -n${LINENO} file.txt
2 голосов
/ 23 мая 2009

Почему бы вам просто не сделать:

awk -- '{if (!/*/) print $0; else exit}' file.txt

или то, что быстрее:

awk -- '/*/ {exit}; {print}' file.txt
1 голос
/ 23 мая 2009

Я думаю, вы могли бы также использовать xargs. Что-то вроде:

grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}' | xargs -I % head -n% file.txt
...