从一行中提取列的值(变量)

use*_*211 3 unix bash shell awk

好的,所以我在bash / shell脚本中定义了一个变量($ line)为

$line = "abc:123:def:345" 
Run Code Online (Sandbox Code Playgroud)

需要获得此column2 =“ 123”

如何提取第二列的值,即“ 123”,并将其命名为另一个变量,以后可以求和?我知道您必须根据定界符':'对其进行分隔,但是我不知道如何在从$ line变量获取输入的同时转移到其他变量。我之所以这么问,是因为出于某种奇怪的原因,我的代码读取了文本文件的第一行,但它并不仅仅在第一行上执行awk,因此总和是错误的。

FILE=$1
while read line
do
 awk -F: '{summation += $3;}END{print summation;}'
done < $FILE
Run Code Online (Sandbox Code Playgroud)

-通过外壳脚本编写代码

谢谢。

Jot*_*tne 6

您可以awk用来获取第二个字段:

line="abc:123:def:345"
Run Code Online (Sandbox Code Playgroud)

awk -F: '{print $2}' <<< "$line"
123
Run Code Online (Sandbox Code Playgroud)


gle*_*man 3

要在 shell 中分配变量,$左侧的 no、 、 和 周围没有空格=,并且<>不是有效的引号字符

line="abc:123:def:345"
Run Code Online (Sandbox Code Playgroud)

在 bash 中,你可以这样做:

IFS=: read -ra fields <<< "$line"
Run Code Online (Sandbox Code Playgroud)
  • 暂时设置IFS为冒号
  • 使用$line变量作为read命令的输入(here-string
  • 并将值读入fields数组。

Bash 数组从零开始索引,因此要提取第二个字段:

echo "${fields[1]}"   # => 123
Run Code Online (Sandbox Code Playgroud)