【发布时间】:2016-06-18 23:36:10
【问题描述】:
我对 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和bash/ksh语法合并为一个脚本。awk不会理解IFS或<<<或read与 shell 语法相同。或${!array[@]}就此事。用简单的awk编写所有这些(对于您的预期输出)应该没有任何问题。抛弃 shell 语法并简化!查找awk的splilt()函数的示例来解析A:3 E:3 PS:6的$2字段。祝你好运。