2014-01-06 46 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 
相關問題