Bash 从文本文件索引特定数字的有效方法
我有一个文本文件,其中包含一行不同的数字(即2 4 1 7 12 1 4 3 1 2) 我试图得到每次出现1的索引。这是我目前正在做的事情的代码(因为我的索引从0开始,所以用1减去每个索引值) 虽然代码可以工作,但我想知道是否有一种更短的方法可以完成这项工作?结果是gradvec变量为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 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}
,则打印记录编号减去11
将记录分隔符定义为一个或多个任意类型的空格RS='[[:space:]+'
((count++)
放在循环末尾,这样您就不必减去1。使用数组而不是字符串,如果($length==1)),则不需要if($length==1))
$ awk '$1==1 {print NR-1}' RS='[[:space:]]+' file
2
5
9
10