如何在变量(shell脚本,unix)中存储行号?

时间:2012-06-04 17:22:40

标签: unix

file.txt如下:

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,如何存储相同的行号?

3 个答案:

答案 0 :(得分: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]} 

答案 1 :(得分:0)

像这样:

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

“LINES”变量将具有:“1 2 3 4”。

注意:您的问题非常通用。这个答案适用于Bash或Korn Shell。

答案 2 :(得分:0)

如果您想对每一行进行处理,您可以执行以下操作:

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