好的,所以我有一个在bash / shell脚本中定义为
的变量($ line)$line = "abc:123:def:345"
需要得到这个列2 =" 123"
如何提取第二列的值,即" 123"并将其命名为一个不同的变量,以后可以加总?我知道你必须根据分隔符分开它:':'但我不知道在从$ line变量输入的同时如何转换到不同的变量。我只问这个因为一些奇怪的原因我的代码读取文本文件的第一行但不仅仅在第一行执行awk 因此总和是错误的。
FILE=$1
while read line
do
awk -F: '{summation += $3;}END{print summation;}'
done < $FILE
-code via shell script
感谢。
答案 0 :(得分:6)
您可以使用awk
获取第二个字段:
line="abc:123:def:345"
awk -F: '{print $2}' <<< "$line"
123
答案 1 :(得分:3)
要在shell中指定变量,左侧没有$
,=
周围没有空格,<
和>
无效报价字符
line="abc:123:def:345"
在bash中,你会这样做:
IFS=: read -ra fields <<< "$line"
IFS
设置为冒号$line
变量作为read
命令的输入(here-string)fields
数组。Bash数组从零开始编制索引,因此要提取第二个字段:
echo "${fields[1]}" # => 123
答案 2 :(得分:0)
Line2=$(expr $line : "[^:]*:\([^:]*\)")
或如果字段总是3个字符
Line2=${line:4:3}
答案 3 :(得分:0)
使用普通的POSIX功能:
#!/usr/bin/env sh
line='abc:123:def:345'
IFS=:
# Split line on IFS into arguments
set -- $line
printf %s\\n "$2"
替代方法:
#!/usr/bin/env sh
line='abc:123:def:345'
# Strip out first column
a="${line#*:}"
# Strip out remaining columns except 1st
b="${a%%:*}"
printf %s\\n "$b"