2012-06-04 81 views
2

file.txt的是如下:如何在變量(shell腳本,unix)中存儲行號?

gui : 789 
gui : 789 
gui : 789 
gui : 789 
abc : 120 

的followibng給出O/P作爲

$ grep -n "gui : 789" file.txt | cut -f1 -d: 
1 
2 
3 
4 

如果有N個這樣的GUI的:789,如何存儲相同的行號?

+0

將輸出重定向到一個文件。 –

+0

你問如何計算'N'? –

+0

我必須將o/p(每行代碼)存儲在一個變量中,這在下一步中更加有用。我可以做嗎? –

回答

3

您可以使用此AWK 1班輪:

awk '/gui : 789/{print NR}' file 

要處理這樣的循環中:

while read l 
do 
    echo $l 
done < <(awk '/gui : 789/{print NR}' file) 

編輯:這些命令適用於任何數量的文件中匹配的工作。要存儲上述行號的輸出數組:

arr=($(awk '/gui : 789/{print NR}' x)) 

稍後過程中,這些數組元素:

echo ${arr[0]} 
echo ${arr[1]} 
... 
echo ${arr[5]} 
+0

@ anubhava:它打印輸出如下面是相同的,因爲我在後 這些行號要被存儲在單獨的變量作爲 一個= 1 B = 2 c項= 3 d = 4 –

+0

它應該是通用的。 –

+0

@JackieJames:請告訴你這裏「通用」是什麼意思,我可以肯定地編輯我的答案以反映這一點。 – anubhava

0

像這樣:

LINES=$(grep -n "gui : 789" file.txt | cut -f1 -d:) 

的 「LINES」 變量將具有 「1 2 3 4」。

注意:你的問題是非常通用的。這個答案適用於Bash或Korn Shell。

0

如果你想要做處理每行,你可以這樣做:

grep -n "gui : 789" file.txt | cut -f1 -d: | while read lineno; do 
    : # process using $lineno 
done