shell - shell脚本中的剪切命令
问题描述
我的 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。有没有更好的方法可以让我可以获得这些值。
解决方案
使用这段代码,您可以将您的行转换为适当的关联数组:
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" )'
您可以使用以下内容访问内容:echo "${dict[A]}"
TX-SPN
起始值(10
在您的示例中)可以作为"${dict[START]}"
. 选择一个START
不会在您的输入中显示为键的值。
如果你想遍历很多行,比如你的$i
,你可以这样做:
while read i
do
declare -A dict
# ... add code from above ...
done < input_file
使用关联数组的优势在于,通过这种方式,您可以以更易于理解的方式访问您的值,即使用键而不是一些任意索引,这些索引很容易混淆,并且在更改代码时需要不断维护。
推荐阅读
- node.js - 数据未显示在 Dynamodb 表中
- r - 如何每周刷新 R 闪亮数据
- angular - 角度路由路径,包括哈希
- json - 将来自 API 请求的数据存储在数据库或 Shopify 数组变量中
- ios - _Objective-C 中的可空方法
- python - Mac 终端的替代 Windows/bash 命令“workon [插入虚拟环境名称]”
- pandas - Pandas - 将一列字符串与一列正则表达式匹配
- pandas - 根据条件替换 Pandas DataFrame 中的值
- sql - 数组包含空值 PostgreSQL
- tensorflow - MobileNet v1如何在tensorflow上实现小参数计数?