gpt4 book ai didi

arrays - 在 shell 脚本中使用 awk 内的数组

转载 作者:行者123 更新时间:2023-12-02 01:09:29 26 4
gpt4 key购买 nike

我对 Unix shell 脚本非常陌生,并试图获得一些有关 shell 脚本的知识。请检查我的要求和我的方法。

我有一个包含数据的输入文件

ABC = A:3 E:3 PS:6 
PQR = B:5 S:5 AS:2 N:2

我正在尝试解析数据并得到结果

ABC
A=3
E=3
PS=6

PQR
B=5
S=5
AS=2
N=2

这些值可以水平和垂直添加,所以我尝试使用数组。我正在尝试这样的事情:

myarr=(main.conf | awk -F"=" 'NR!=1 {print $1}'))
echo ${myarr[1]}
# Or loop through every element in the array
for i in "${myarr[@]}"
do
:
echo $i
done

awk -F"=" 'NR!=1 {
print $1"\n"
STR=$2
IFS=':' read -r -a array <<< "$STR"
for i in "${!array[@]}"
do
echo "$i=>${array[i]}"
done

}' main.conf

但是当我将此代码添加到 .sh 文件并尝试运行它时,我收到语法错误,如下所示

$ awk -F"=" 'NR!=1 {
> print $1"\n"
> STR=$2
> FS= read -r -a array <<< "$STR"
> for i in "${!array[@]}"
> do
> echo "$i=>${array[i]}"
> done
>
> }' main.conf
awk: cmd. line:4: FS= read -r -a array <<< "$STR"
awk: cmd. line:4: ^ syntax error
awk: cmd. line:5: for i in "${!array[@]}"
awk: cmd. line:5: ^ syntax error
awk: cmd. line:8: done
awk: cmd. line:8: ^ syntax error

如何才能完成上述期望?

最佳答案

这是执行您想要的操作的 awk 代码:

$ cat tst.awk
BEGIN { FS="[ =:]+"; OFS="=" }
{
print $1
for (i=2;i<NF;i+=2) {
print $i, $(i+1)
}
print ""
}

这是 shell 脚本(是的,shell 脚本操作文本的所有操作都是调用 awk):

$ awk -f tst.awk file
ABC
A=3
E=3
PS=6

PQR
B=5
S=5
AS=2
N=2

UNIX shell 是一个调用 UNIX 工具(find、sort、sed、grep、awk、tr、cut 等)的环境。它有自己的语言用于操作(例如创建/销毁)文件和进程以及对工具的调用排序,但它并不旨在用于操作文本。发明 shell 的人还发明了 awk,供 shell 调用来操作文本。

阅读https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice以及 Arnold Robbins 所著的《Effective Awk 编程》第四版一书。

关于arrays - 在 shell 脚本中使用 awk 内的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35809522/

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