gpt4 book ai didi

bash - unix awk 列等于一个变量

转载 作者:行者123 更新时间:2023-11-29 09:35:12 27 4
gpt4 key购买 nike

我想打印两列等于一个变量的行,例如,输入:

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 '$1==$a' && '$10==$b' test_file
cat test_file|awk '$1=="($a)" && $10=="($b)"'
cat test_file|awk '$1==($a) && $10==($b)'
cat test_file|awk '$1=="$a" && $10=="$b"'

此外,我在一个 while 循环中运行它,所以 $a$b 不断变化请帮助..

最佳答案

您使用错误的方法将 shell 变量传递给 awk 命令。应该是这样的

awk -v a="$a" -v b="$b" '$1==a && $10 == b' 

它的作用

  • -v a="$a" 创建一个 awk 变量 a 并将 shell 变量 $a 的值赋给它.

  • -v b="$b" 创建 awk 变量 b

awk '$1==a && $10 == b' a="$a" b="$b" file

当你写这样的语句时

awk -v '$1==$a' && '$10==$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" '$1==a && $10 == 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

关于bash - unix awk 列等于一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30614156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com