我有一个包含各种数字的文本文件(即2 4 1 7 12 1 4 4 3 1 1 2)
我正在尝试获取每次出现的索引1.这是我正在做的事情的代码(因为我的索引从0开始减去每个索引值1)。
eq='0'
gradvec=()
count=0
length=0
for item in `cat file`
do
((count++))
if (("$item"=="$eq"))
then
((length++))
if (("$length"=='1'))
then
gradvec=$((count -1))
else
gradvec=$gradvec' '$((count - 1))
fi
fi
done
虽然代码有效但我想知道是否有更短的方法吗?结果是gradvec变量为
2 5 9 10
答案 0 :(得分:1)
将此视为输入文件:
$ cat file
2 4 1 7 12 1
4 4 3 1 1 2
获取输入文件中每次出现1
的索引:
$ awk '$1==1 {print NR-1}' RS='[[:space:]]+' file
2
5
9
10
工作原理:
$1==1 {print NR-1}
如果任何记录中的值为1
,请将记录编号减去1。
RS='[[:space:]]+'
将记录分隔符定义为任何类型的空格中的一个或多个。