3

我有这组管道命令:

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

它告诉我它首先找到星号的前一行。现在我想将前面的几行管道传输到:

head -n<that previous line number>

Head 需要紧跟 -n 参数的数字,不带空格,例如:

head -n4

我怎样才能做到这一点?它只是不接受添加

| head -n

在命令集的末尾。我的搜索没有结果。谢谢!

4

3 回答 3

4

您希望反引号替换该值:

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
于 2009-05-22T19:31:53.063 回答
2

你为什么不这样做:

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

或者这个,更快:

awk -- '/*/ {exit}; {print}' file.txt
于 2009-05-22T21:51:09.740 回答
1

我认为您也可以使用 xargs。就像是:

grep -n '*' file.txt | head -n1 | awk -F\: '{print $1-1;}' | xargs -I % head -n% file.txt
于 2009-05-22T20:08:46.313 回答