Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:嵌套for循环以迭代更改矩阵中的paritular元素_Bash_Awk_Sed - Fatal编程技术网

Bash:嵌套for循环以迭代更改矩阵中的paritular元素

Bash:嵌套for循环以迭代更改矩阵中的paritular元素,bash,awk,sed,Bash,Awk,Sed,我尝试在file.txt中更改格式,如下所示: 0.0 0.0 1.0 2.0 3.0 0.0 0.0 3.0 3.0 35.0 ... 每行中只有第二个零:从0.0到某些数字 我知道sed命令会更改元素,但如果我编写类似的内容: input=0 for f in {0..2} do sed -i "1s/$input/$f/" file.txt input=$f done sed命令更改文件中的第一个零,将其更改为: 1.0 0.0 1.0 2.0 3.0 1.0

我尝试在file.txt中更改格式,如下所示:

0.0 0.0 1.0 2.0 3.0
0.0 0.0 3.0 3.0 35.0 
...
每行中只有第二个零:从0.0到某些数字

我知道
sed
命令会更改元素,但如果我编写类似的内容:

input=0 
  for f in {0..2}
  do   
  sed -i "1s/$input/$f/" file.txt
 input=$f
done
sed命令更改文件中的第一个零,将其更改为:

1.0 0.0 1.0 2.0 3.0
1.0 0.0 3.0 3.0 35.0
...
但是,我想:

0.0 0.1 1.0 2.0 3.0
0.0 0.1 3.0 3.0 35.0
...
那么,我如何指定sed必须更改数字的位置呢

升级:

我尝试使用sadasidha猜测的
sed
命令:

number=0.2
sed -r "s/^([0-9].[0-9]) ([0-9].[0-9])/\1 ${number}/" input.txt
number=0.2
sed -r "s/^([0-9].[0-9]) ([0-9].[0-9])/\1 ${number}/" input.txt
但我的要求有点不同,我的想法是做一个循环,我可以在第四行增加第二个元素,例如,10倍,然后是第三行的第二个元素,然后是第二行,然后是第一个…就像在四个循环中一样:

input=0
     for f in {0..10}
       for m in {0..10}
        for s in {0..10}
         for g in {0..10}
      do   
       change the second element on the fourth line 10 times,
     input=$f
    done
        change the second element on the third line 10 times,
     input=$m
    done
....

因此,对于我放入do循环中的每个数字组合(即:0,10之间),我可以在第二行中有11^4个不同的元素值。

这是
awk
的作业。默认情况下,
awk
拆分空格序列(
[[:space:]+
)。一旦
awk
读取该行,它将在默认分隔符上拆分该行,并将其分配给可以使用
$
和列号引用的变量

例如:

$ cat file
0.0 0.0 1.0 2.0 3.0
0.0 0.0 3.0 3.0 35.0
我们使用
$2
增加第二列的值,最后的
1
允许我们打印行。您还可以将其设置为:

$ awk '{$2=($2==0?0.1:$2); print}' file
0.0 0.1 1.0 2.0 3.0
0.0 0.1 3.0 3.0 35.0
使用perl很容易

perl -lanE '$F[1]=0.1 unless $F[1]+0; say "@F"' filename
用于下一个输入

0.0 0.0 1.0 2.0 3.0
0.0 0.0 3.0 3.0 35.0 
0.0 0.9 3.0 3.0 35.0 
印刷品

0.0 0.1 1.0 2.0 3.0
0.0 0.1 3.0 3.0 35.0
0.0 0.9 3.0 3.0 35.0
number=0.2
sed -r "s/^([0-9].[0-9]) ([0-9].[0-9])/\1 ${number}/" input.txt