gpt4 book ai didi

linux - Bash:无法使用计算识别具有范围的文件名

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:40 25 4
gpt4 key购买 nike

我正在尝试使用 awk 进行多文件计算:awk average same column in multiple files(with certain range)

awk 正在尝试从我的范围 avg_x.{1..1000}.dat 中获取文件列表。现在,我发现了一个问题。如果我明确地写范围:

awk ' {a[$1]+=$8;b[$1]++;}END{for(i=1;i<=(FNR-1);i++)print i,a[i]/b[i];}' avg_x.{1..1000}.dat

它工作得很好。但是,如果我使用 bash 表达式在内部添加一些计算,则它不起作用:

i=0
interval=1000
awk ' {a[$1]+=$8;b[$1]++;}END{for(i=1;i<=(FNR-1);i++)print i,a[i]/b[i];}' avg_x.{$((i+1))..$((i+interval))}.dat

返回错误:

awk: can't open file avg_x.{1..1000}.dat

注意:

让我们更简单:即使我执行 cp avg_x.{$((i+1))..$((i+interval))}.dat test/. 它返回:

cp: avg_x.{0..1000}.dat: No such file or directory

最佳答案

一种可能的方法是通过基本命令的可怕组合。

i=10
interval=20
awk '<your script here>' $(yes '' | awk '{printf("avg_x%d.dat\n", FNR)}' |\
head -n $(( $i + $interval )) | tail -n $(( 1 + $interval )) )

我们可以使用 echo 代替 awk 轻松地演示这一点(我添加了一些换行符以使其更具可读性):

$ i=20
$ interval=10
$ echo $(yes '' | awk '{printf("avg_x%d.dat\n", FNR)}' |
head -n $(( $i + $interval )) | tail -n $(( 1 + $interval )) )
avg_x20.dat avg_x21.dat avg_x22.dat avg_x23.dat avg_x24.dat avg_x25.dat
avg_x26.dat avg_x27.dat avg_x28.dat avg_x29.dat avg_x30.dat

关于linux - Bash:无法使用计算识别具有范围的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35623345/

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