【发布时间】:2021-08-23 17:50:49
【问题描述】:
我有一个场景,我想逐行获取所有值的计数并将其存储到动态数组中
文件中的数据:
"A","B","C","B"
"P","W","R","S"
"E","U","C","S"
"Y","F","C"
第一行为: 4 -> 值
第二行为: 4 -> 值
第三行为: 4 -> 值
第四行为: 3 -> 值
预期输出: 存储到数组: array_list=(4,4,4,3)
写了一个脚本但不工作
array_list=()
while read -r line
do
var_comma_count=`echo "$line" | tr -cd , | wc -c`
array_list=+($( var_comma_count))
done < demo.txt
当我打印数组时,它应该给我所有值: echo "{array_list[@]}"
注意: 该文件最后可能包含不应读取的空行
当我计算文件时,它给了我计数:5,它应该忽略最后一行是空的
当我使用 awk 时,它给了我正确的计数:awk '{print NF}' demo.txt -> 4
我知道使用 while 循环处理文件不是最佳做法,但我们将不胜感激任何更好的解决方案
【问题讨论】:
-
array_list=($(awk '{print NF}' demo.txt))?store it to dynamic array它只是一个“数组”,我的意思是它不叫“动态”。 -
您引用的字段可以包含逗号或换行符吗?
-
另外,之前有人告诉过您,在询问有关脚本的问题之前,您应该将脚本复制/粘贴到shellcheck.net,请这样做,然后编辑您的问题以将您当前的脚本替换为固定的脚本结果。
-
@EdMorton 下次肯定会用 shell 检查检查代码并发布问题
-
下次不用等了,这次马上就可以了,最多2分钟左右。
标签: shell awk text-processing