2012-06-04 76 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