2014-01-06 20 views
1

我想: 1)从文件中提取一个整数N,该文件由特定的关键短语(例如, '无行' 另一个特定短语后 2)grep的N行,说: '从这里开始',即:grep从文件中抽出n行,n从同一文件中提取

输入文件

no of lines 8 
..... 
start from here 
0.6250000000 1 O   1 
0.8750000000 1 O   2 
0.1250000000 1 O   3 
0.3750000000 1 O   4 
0.6250000000 1 O   5 
0.8750000000 1 O   6 
0.1250000000 1 O   7 
0.3750000000 1 O   8 
..... 

输出:

start from here 
0.6250000000 1 O   1 
0.8750000000 1 O   2 
0.1250000000 1 O   3 
0.3750000000 1 O   4 
0.6250000000 1 O   5 
0.8750000000 1 O   6 
0.1250000000 1 O   7 
0.3750000000 1 O   8 

思想像这样的事情会做:

N=`grep 'no of lines' file| tr -d A-Za-z' '` 
grep -A $N 'start from here' 

但显然grep不允许以这种方式传递参数。

感谢您的帮助。

PS。没有必要坚持grep。

更新: 我正在处理的文件实际上是一个DOS文件,我不知道。这造成了一切麻烦。所以实际上,所有提出的解决方案,包括我的(已更正):

tr -d '\r' <file> file_n 
N=`grep 'no of lines' file_n| tr -d A-Za-z' '` 
grep -A $N 'start from here' file_n 

工作得很好。

+3

你能提供一个样本输入和输出? – anubhava

+0

你是否需要grep呢,还是打算使用Python或其他? –

+2

''bash'在调用'grep'前用它的值替换'$ N',所以'grep'不知道正在使用一个变量。问题必须在于如何设置'N'的值。 – chepner

回答

1

将带有AWK容易得多:

awk '/^no of lines/{N=$NF; next} /^start from here/{s=1; i=0} 
     s && i<=N{print; i++; next} {s=0}' file 
start from here 
0.6250000000 1 O   1 
0.8750000000 1 O   2 
0.1250000000 1 O   3 
0.3750000000 1 O   4 
0.6250000000 1 O   5 
0.8750000000 1 O   6 
0.1250000000 1 O   7 
0.3750000000 1 O   8 
0

你可以使用xargs重定向从第一次调用的结果grep第二个呼叫:

grep 'no of lines' file|tr -d A-Za-z' '|xargs grep 'start from here' file -A 
+0

仍然会出现':无效的上下文长度参数' – rarpas

+0

为什么''xargs''如果您可以使用简单的命令替换? –

+0

为什么不呢?简单是相对的。 – sfo2k8

1

当然grep允许传递参数这种方式(因为它甚至不知道一个变量是否被传递或只是一个纯文本)。

您的脚本存在的问题是您刚才没有指定第二个grep命令的文件名。这是一个好一点的版本,你的脚本能正确运行:

n=$(grep -Pom 1 'no of lines \K[0-9]+' yourfile) 
grep -A "$n" 'start from here' yourfile 
+0

作品,谢谢!问题不在于缺少的文件名(尽管忘了在这里复制它),但是以我回想起'N'的方式。 “$ N”中缺少双引号。 – rarpas

+0

@rarpas nope,引号在这里并不重要,因为你的''N''变量总是一个整数。正如已经提到的那样,问题出在你设置''N'' –

+0

的方式,你设置'N'的方式并不在乎文件是dos还是unix,因此它适用于我的dos文件。 – rarpas

0

用awk

awk '/^no of lines/{N=$NF} 
    /^start from here/{for(i=1;i<=N+1;i++) {print;getline}}' file 
相关问题