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

Bash 从文本文件索引特定数字的有效方法,bash,indexing,Bash,Indexing,我有一个文本文件,其中包含一行不同的数字(即2 4 1 7 12 1 4 3 1 2) 我试图得到每次出现1的索引。这是我目前正在做的事情的代码(因为我的索引从0开始,所以用1减去每个索引值) 虽然代码可以工作,但我想知道是否有一种更短的方法可以完成这项工作?结果是gradvec变量为 2 5 9 10 将其视为输入文件: $ cat file 2 4 1 7 12 1 4 4 3 1 1 2 要获取输入文件中每次出现的1的索引: $ awk '$1==1 {print NR-1}' RS

我有一个文本文件,其中包含一行不同的数字(即2 4 1 7 12 1 4 3 1 2)

我试图得到每次出现1的索引。这是我目前正在做的事情的代码(因为我的索引从0开始,所以用1减去每个索引值)

虽然代码可以工作,但我想知道是否有一种更短的方法可以完成这项工作?结果是gradvec变量为

2 5 9 10

将其视为输入文件:

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

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


您正在尝试将BASH用作通用编程语言。你看,人们常常不喜欢它。您可以在一行中使用grep来解决问题。请将该示例输入的所需输出添加到您的问题中。将
((count++)
放在循环末尾,这样您就不必减去1。使用数组而不是字符串,如果($length==1)),则不需要
if($length==1))
$ awk '$1==1 {print NR-1}' RS='[[:space:]]+' file                                 
2                                                                                         
5                                                                                         
9                                                                                         
10