unix awk 列等于一个变量
unix awk column equal to a variable
我想打印两列等于一个变量的行,例如,输入:
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
2607s1 NC_000067.6 97.67 43 1 0 8 50 1e-13 75.0
第一列和最后一列的变量:
a="2607s1"; b="84.2"
并使用 awk 命令,输出:
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
我尝试了以下方法但没有用:
awk -v '==$a' && '==$b' test_file
cat test_file|awk '=="($a)" && =="($b)"'
cat test_file|awk '==($a) && ==($b)'
cat test_file|awk '=="$a" && =="$b"'
此外,我运行它在一个while循环中,所以$a
和$b
不断变化请帮助..
您可以尝试以下 awk 命令。
awk -v var1="$a" -v var2="$b" '==var1&&$NF==var2' file
您正在使用错误的方法将 shell 变量传递给 awk 命令。应该是
awk -v a="$a" -v b="$b" '==a && == b'
它的作用
-v a="$a"
创建一个 awk 变量 a
并将 shell 变量 $a
的值赋给它。
-v b="$b"
创建 awk 变量 b
.
或
awk '==a && == b' a="$a" b="$b" file
当你写这样的语句时
awk -v '==$a' && '==$b' test_file
awk 不知道 $a
$b
是什么,因为两者都是 shell 变量。
并且使用 -v
传递 shell 变量的正确方法如示例中所示。
来自 awk 手册
-v var=val
--assign var=val
Assign the value val to the variable var, before execution of
the program begins. Such variable values are available to the
BEGIN block of an AWK program.
测试
$ cat file
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
2607s1 NC_000067.6 97.67 43 1 0 8 50 1e-13 75.0
$ a="2607s1"; b="84.2"
$ awk -v a="$a" -v b="$b" '==a && == b' file
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
你也可以这样做(这样可以避免使用 -v 参数)
awk '=="'$a'" && =="'$b'"' file
$a
之前的引号 '
将关闭字符串解释。
$a
之后的引号 '
将打开字符串解释。
$a
以这种方式解释并替换为它的值。
我想打印两列等于一个变量的行,例如,输入:
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
2607s1 NC_000067.6 97.67 43 1 0 8 50 1e-13 75.0
第一列和最后一列的变量:
a="2607s1"; b="84.2"
并使用 awk 命令,输出:
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
我尝试了以下方法但没有用:
awk -v '==$a' && '==$b' test_file
cat test_file|awk '=="($a)" && =="($b)"'
cat test_file|awk '==($a) && ==($b)'
cat test_file|awk '=="$a" && =="$b"'
此外,我运行它在一个while循环中,所以$a
和$b
不断变化请帮助..
您可以尝试以下 awk 命令。
awk -v var1="$a" -v var2="$b" '==var1&&$NF==var2' file
您正在使用错误的方法将 shell 变量传递给 awk 命令。应该是
awk -v a="$a" -v b="$b" '==a && == b'
它的作用
-v a="$a"
创建一个 awk 变量a
并将 shell 变量$a
的值赋给它。-v b="$b"
创建 awk 变量b
.
或
awk '==a && == b' a="$a" b="$b" file
当你写这样的语句时
awk -v '==$a' && '==$b' test_file
awk 不知道 $a
$b
是什么,因为两者都是 shell 变量。
并且使用 -v
传递 shell 变量的正确方法如示例中所示。
来自 awk 手册
-v var=val --assign var=val Assign the value val to the variable var, before execution of the program begins. Such variable values are available to the BEGIN block of an AWK program.
测试
$ cat file
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
2607s1 NC_000067.6 97.67 43 1 0 8 50 1e-13 75.0
$ a="2607s1"; b="84.2"
$ awk -v a="$a" -v b="$b" '==a && == b' file
2607s1 NC_000067.6 95.92 49 1 1 3 50 1e-14 84.2
2607s1 NC_000067.6 97.73 44 1 0 7 50 4e-14 84.2
你也可以这样做(这样可以避免使用 -v 参数)
awk '=="'$a'" && =="'$b'"' file
$a
之前的引号 '
将关闭字符串解释。
$a
之后的引号 '
将打开字符串解释。
$a
以这种方式解释并替换为它的值。