请用正确的语法编写这段代码?我想为 a 给出一个值,然后写一个条件 - 如果第一列等于 a,则写下这一行。谢谢
#!/bin/bash
for i in {0..2}; do
awk -v var=$i 'a==0.065+var*0.005 $1 == a { print $0 } test.res > outa="$a"'
测试.res
6.500000e-02 1.400000e+02 3.000000e-01 8.195821e+05 6.669776e-01
6.500000e-02 1.400000e+02 3.500000e-01 7.085306e+05 5.766037e-01
6.500000e-02 1.400000e+02 4.000000e-01 7.737306e+05 6.296636e-01
6.500000e-02 1.400000e+02 4.500000e-01 7.929304e+05 6.452884e-01
7.000000e-02 1.600000e+02 5.000000e-01 1.561877e+06 1.271059e+00
7.000000e-02 1.600000e+02 5.500000e-01 1.548409e+06 1.260098e+00
7.000000e-02 1.600000e+02 6.000000e-01 1.644194e+06 1.338048e+00
7.500000e-02 1.400000e+02 3.000000e-01 6.659456e+05 5.419479e-01
7.500000e-02 1.400000e+02 3.500000e-01 7.285058e+05 5.928595e-01
7.500000e-02 1.400000e+02 4.000000e-01 7.265234e+05 5.912463e-01
7.500000e-02 1.400000e+02 4.500000e-01 2.780260e+06 2.262581e+00
7.500000e-02 1.400000e+02 5.000000e-01 9.186277e+06 7.475812e+00
期望的输出
outa=0.065
6.500000e-02 1.400000e+02 3.000000e-01 8.195821e+05 6.669776e-01
6.500000e-02 1.400000e+02 3.500000e-01 7.085306e+05 5.766037e-01
6.500000e-02 1.400000e+02 4.000000e-01 7.737306e+05 6.296636e-01
6.500000e-02 1.400000e+02 4.500000e-01 7.929304e+05 6.452884e-01
outa=0.070
7.000000e-02 1.600000e+02 5.000000e-01 1.561877e+06 1.271059e+00
7.000000e-02 1.600000e+02 5.500000e-01 1.548409e+06 1.260098e+00
7.000000e-02 1.600000e+02 6.000000e-01 1.644194e+06 1.338048e+00
outa=0.075
7.500000e-02 1.400000e+02 3.000000e-01 6.659456e+05 5.419479e-01
7.500000e-02 1.400000e+02 3.500000e-01 7.285058e+05 5.928595e-01
7.500000e-02 1.400000e+02 4.000000e-01 7.265234e+05 5.912463e-01
7.500000e-02 1.400000e+02 4.500000e-01 2.780260e+06 2.262581e+00
7.500000e-02 1.400000e+02 5.000000e-01 9.186277e+06 7.475812e+00
==
是一个比较,=
是一个作业。
$ i=1; awk -v var="$i" 'BEGIN{a=0.065+var*0.005} $1 == a' file
7.000000e-02 1.600000e+02 5.000000e-01 1.561877e+06 1.271059e+00
7.000000e-02 1.600000e+02 5.500000e-01 1.548409e+06 1.260098e+00
7.000000e-02 1.600000e+02 6.000000e-01 1.644194e+06 1.338048e+00
顺便说一句,不要在输出文件名中使用=
,因为它会使后续调用 awk 等工具难以区分文件名和变量赋值。
awk 'script' outa=1
正在调用没有文件名的 awk,并且名为 outa
的变量的值为 1。您需要执行以下操作:
awk 'script' ./outa=1
告诉 awk outa=1
是文件名。
最后 - 目前还不清楚为什么你使用循环而不仅仅是:
awk '{print > sprintf("outa_%.03f",$1)}' file
或者,如果您有超过 15 个左右的输出文件,并且不使用 Gawk 来处理所有这些打开的文件:
awk '{curr=sprintf("outa_%.03f",$1)} curr!=prev{close(prev); prev=curr} {print > curr}' file
如果你想使用 for 循环中的 i
值,你需要在 awk
中声明变量
awk -v var=$i 'a==0.065+var*0.005 .....
如果您发布 samle 数据以及您希望输出的方式,我想我们可以awk
完成所有操作,而无需外部for
循环。