我想知道在单独的变量中将值存储在不同列中的最有效方法是什么
这就是我现在所做的,但我不确定是否有更好的解决方案:
ITEM="5.8 1.4 2345 user123 23:27 vim test.c"
CPU="$(echo "$ITEM" | awk '{print $1}')"
MEM="$(echo "$ITEM" | awk '{print $2}')"
PID="$(echo "$ITEM" | awk '{print $3}')"
USER="$(echo "$ITEM" | awk '{print $4}')"
TIME="$(echo "$ITEM" | awk '{print $5}')"
ARGS="$(echo "$ITEM" | awk '{ for(i=6;i<=NF;++i) printf("%s ", $i) }')"
答案 0 :(得分:3)
没有必要创建这么多变量,我相信这就是为什么阵列在使用中,尝试:
ITEM="5.8 1.4 2345 user123 23:27 vim test.c"
arr=($ITEM)
要访问此阵列中的项目,您可以使用:
CPU="${arr[0]}"
echo "$CPU"
5.8
MEM="${arr[1]}"
echo "$MEM"
1.4
PID="${arr[2]}"
echo "$PID"
2345
USER="${arr[3]}"
echo "$USER"
user123
TIME="${arr[4]}"
echo "TIME"
TIME
ARGS="${arr[@]:5}"
echo "$ARGS"
vim test.c
编辑: 此处也添加read
解决方案。
read -a arr <<<"$ITEM"
答案 1 :(得分:3)
阵列是自然的选择。所有大写名称都保留给shell,因此最好坚持使用小写。
items=(5.8 1.4 2345 user123 23:27 vim test.c)
cpu=${items[0]}
mem=${items[1]}
pid=${items[2]}
user=${items[3]}
time=${items[4]}
args=${items[@]:5}
如果您从字符串开始,则可以使用read
轻松地将项目存储到多个变量中。
read -r cpu mem pid user time args <<< "5.8 1.4 2345 user123 23:27 vim test.c"