【发布时间】:2018-06-16 18:39:39
【问题描述】:
我正在尝试将 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 并不能真正访问 shell 的变量,反之亦然。您能否重构您的问题以在 awk 脚本中完成所有处理?或者相反,让 Awk 处理一次文件并以 shell 可以直接解析的形式打印结果。但我在想,如果您的要求不平凡,也许正确的解决方案是切换到 Python 等现代脚本语言。
-
不,我不能在 python 中做到这一点。我可以重构我的问题,但我需要在 bash 中进行。问题是我不是 bash 专家
-
你能概括一下这个脚本更广泛的用途吗?它是否要求这些数组是 Bash 数组?一个 Awk 脚本可能是重构它的最简单的方法,但是如果您需要 Awk 中不可用的功能,这会使事情变得复杂(尽管您也可以从 Awk 调用外部命令)。
-
你在用
bash在超级计算机上做数据分析? -
你刚才说的是
bash cannot handle floating point numbers,然后是it can be done in bash。 bc 和 gawk 都不是 bash。每个人都在告诉您您需要使用 bash 以外的工具,并且您在争辩说您可以/必须使用 bash,同时告诉我们您已经在使用 bash 以外的工具。没有人建议您不能从 bash 调用外部工具,但是您坚持i need to do it in bash让我们感到困惑。只需在 awk 中完成。