Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash awk将模式结果存储到shell数组变量_Bash_Awk - Fatal编程技术网

Bash awk将模式结果存储到shell数组变量

Bash awk将模式结果存储到shell数组变量,bash,awk,Bash,Awk,我试图将awk匹配的模式结果存储到shell数组变量。下面是一个简化的例子: #!/bin/bash declare -a array1=() declare -a array2=() READ_FILE="directory1/read_file.csv" WRITE_FILE="directory2/results.csv" #variable for counting array index count1=0 count2=0 # # # need help with line belo

我试图将awk匹配的模式结果存储到shell数组变量。下面是一个简化的例子:

#!/bin/bash
declare -a array1=()
declare -a array2=()
READ_FILE="directory1/read_file.csv"
WRITE_FILE="directory2/results.csv"

#variable for counting array index
count1=0
count2=0
#
#
# need help with line below
# $2 below is the second set of characters which is a floating point number
awk -F 'string1_to_search' '{$array1[count1++] = $2}' $READ_FILE 
awk -F 'string2_to_search' '{$array2[count2++] = $2}' $READ_FILE 
#count++ indicates post increment of count variable

#do something with the array
.
.
#end

任何建议都会有帮助。

那么大概是这样的吧

awk '/string1_to_search/ {
        count["id1"]++; sum["id1"] += $2 }
    /string2_too/ {
        count["id2"]++; sum["id2"] += $2 }
    # ...
    END { for (k in count) printf("%s: sum %f/count %i = avg %f\n", k, sum[k], count[k], sum[k]/count[k]) }' inputfile
我似乎记得有一种聪明的方法可以计算滚动方差,而不必将整个输入集保存在内存中;或者只需收集以空格分隔的值(
value[“id”]=value[“id”]”“$2
),然后将其拆分为一个列表,并在其末尾附近循环。或者,将其简化为一次只检查一个搜索字符串并多次运行(希望输入不是很大)。或者切换到Perl,它可以让您轻松地收集列表列表和其他嵌套结构的列表


显然,将常见功能分解为单独的功能,这样您就不会有重复的代码。。。我想这样更清楚,但如果发现bug或需要其他更改,只需更改代码中的一个位置。

另一种方法是让awk打印可以传递给bash中数组变量的数字,如下所示:

mapfile -t array1 < <( awk -F 'string1_to_search' '{print $2}' "$READ_FILE" )

mapfile-tarray1bash
在超级计算机上进行数据分析?您刚才说
bash无法处理浮点数
,然后
可以在bash
中完成。bc和gawk都不是bash。每个人都在告诉你需要使用bash以外的工具,你在说你已经在使用bash以外的工具,而你却在说你可以/必须使用bash。没有人建议您不能从bash调用外部工具,但您坚持认为
我需要在bash中调用它,这让我们感到困惑。请用awk来完成这一切。谢谢。。看起来很接近我想要的。我会让你知道,如果我能让这个工作:)显然,打破常见的功能到单独的功能,所以你没有重复的代码。。。我想在回答中提到这一点,但我想这实际上更清楚。我使用了其他方法,但这也很有效。我也从不厌倦将人们引向我。:)这里可能有一些不明显的外部因素使得
bc
成为一个不错的选择,但是根据您在这里告诉我们的,我认为大家一致认为使用Awk脚本收集值并执行这些计算似乎是一种更好的方法。