gpt4 book ai didi

linux - 为什么这个 awk 脚本看不到 shell 变量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:43 25 4
gpt4 key购买 nike

请告诉我为什么这个程序不起作用??帮我改进一下。

for i in $(seq 2 30); do awk '{if ($i < 0.05) print $1,$i}' test.txt > phen_$i.txt; done

文件 test.txt 如下所示:

name    phen1   phen2
rs549 0.02 0.02
rs699 0.03 0.03
rs701 1 1
rs751 0.449 0.449
rs884 1 1
rs923 0.9775 0.02
rs970 0.9836 0.03
rs1085 0.0001 0.99
rs1220 0.9316 0.9316

根据if条件,输出文件预计是两个不同的文件,即phen_2.txt和phen_3.txt,分别包含col1和col2,以及col1和col3。

phen_2.txt 的预期结果:

rs549 0.02
rs699 0.03
rs1085 0.0001

phen_3.txt 的预期结果:

rs549 0.02
rs699 0.03
rs923 0.02
rs970 0.03

请帮忙!

最佳答案

for ((i = 2; i <= 30; i++)); do awk -v i="$i" '$i < 0.05 {print $1, $i}' test.txt > "phen_$i.txt"; done

使用变量传递(-v)将 shell 变量获取到 AWK 脚本中。

你不需要seq

编辑:

修复了我的一些过分热心和错误的错误。

以下是如何在 AWK 中完成同样的事情:

awk '{for (i = 2; i <= 30; i++) {if ($i < 0.05) {print $1, $i > "phen_" i ".txt"}}}' test.txt

这只会遍历一次输入文件,但它会针对每一行输入循环遍历一组输出文件。 shell 版本重复读取输入文件,但对每个输出文件写入一次。

关于linux - 为什么这个 awk 脚本看不到 shell 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11411958/

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