Shell脚本中的cut命令

时间:2019-08-15 13:27:56

标签: shell awk

我的shell脚本如下所示

 i="10 ID:794 A:TX-SPN S:0"
 A=`echo $i | cut -d" " -f 3| cut -d":" -f2`  # gives TX-SPN
 ID=`echo $i | cut -d" " -f 2|cut -d":" -f2`  # gives 794 
 sZeroCount=`echo $i | cut -d" " -f 1`  # gives  10

通过上述命令,我能够获取A,ID,sZeroCount变量的值,因为i的值仅包含一个条目,i的值不限于1,它可能会增加到1000。是否有更好的方法在其中我可以获取这些值。

2 个答案:

答案 0 :(得分:1)

带有数组。使用分隔符和i将字符串:拆分为数组a

i="10 ID:794 A:TX-SPN S:0"
IFS=" :" a=($i)
echo "${a[4]}" # TX-SPN
echo "${a[2]}" # 794
echo "${a[0]}" # 10

使用chepner的错误修正:

i="10 ID:794 A:TX-SPN S:0"
IFS=": " read -a a <<< "$i"
echo "${a[4]}" # TX-SPN
echo "${a[2]}" # 794
echo "${a[0]}" # 10

答案 1 :(得分:1)

使用这段代码,您可以将行转换为适当的关联数组:

declare -A dict
for token in START:$i  # choose a value for START that is not a key
do
  IFS=: read key value <<< "$token"
  dict["$key"]=$value
done

您可以使用declare -p dict转储结果:

declare -A dict='([A]="TX-SPN" [S]="0" [ID]="794" [START]="10" )'

然后您可以访问内容e。 G。使用这个:echo "${dict[A]}"

TX-SPN

起始值(在您的示例中为10)可以作为"${dict[START]}"访问。为START选择一个在您的输入中不会显示为键的值。

如果您要遍历像$i这样的许多行,可以这样做:

while read i
do
  declare -A dict
  # ... add code from above ...
done < input_file

使用关联数组的优点是,您可以通过一种更易于理解的方式访问值,即: e。通过使用键而不是一些任意索引,这些索引很容易混淆,并且在更改代码时需要不断维护。

相关问题