从文本文件索引特定数字的有效方法

时间:2018-03-14 03:38:27

标签: bash indexing

我有一个包含各种数字的文本文件(即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

1 个答案:

答案 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:]]+'

    将记录分隔符定义为任何类型的空格中的一个或多个。