【问题标题】:Bash awk: parsing variable string into another variable? [duplicate]Bash awk:将变量字符串解析为另一个变量? [复制]
【发布时间】:2018-09-18 23:25:58
【问题描述】:

我想提取 $line 中包含的所有值并将它们放入变量 var1、var2、... varn 中。我之前确实使用它从文件(in.txt)中提取变量

var1=$(awk  '{print  $1}' < in.txt)
var2=$(awk  '{print  $2}' < in.txt)
....
varn=$(awk  '{print  $n}' < in.txt)

我应该如何更改我的 awk 调用以使用 $line 而不是 in.txt? 例如,我尝试了这些

echo $line | var2=$(awk '{print  $2}')

var2=$(echo $line | awk '{print  $2}')

但没有成功...

==========详情==============

-----调用文件:

 .....
    name=Matrix
    line=$(sed  -n '/^\[T\]/ {n;p}' in.txt)
    echo 'line: ' $line
    L1=$(./procline_matrix_vars.sh $line 30 $name)
    echo 'L1: ' $L1

------- rocline_matrix_vars.sh:

#!/bin/bash

line=$1
choice=$2

var1=$(echo $line | awk '{print $1}')
var2=$(echo $line | awk '{print $2}')
var3=$(echo $line | awk '{print $3}')
var4=$(echo $line | awk '{print $4}')


if [ $choice == 30 ]; then
    L1=$(printf '\n\n\n%s = [ %s %s %s %s \n' "$3" "$var1" "$var2" "$var3" "$var4") 
fi

echo  "${L1%.}"

【问题讨论】:

  • var2=$(echo $line | awk '{print $2}') 应该可以工作,当你做echo "var2" 时它不会给你任何价值吗?
  • 它只适用于字符串中的第一个值。
  • @Sundeep 我明确表示“awk”。
  • 不知道为什么你需要awk.. 另外,变量引用可能是一个问题.. 你可以在调用文件中将$line 更改为"$line",只是为了使其健壮,双引号其他地方和其他变量也...您也可以使用shellcheck.net 来捕获此类问题

标签: bash parsing awk


【解决方案1】:

一种可能的方式:

line="aaa bbb ccc"

var=( $line )

echo "${var[1]}"
echo "my array has ${#var[@]} elements"

输出

bbb
my array has 3 elements

也许是捷径

var=( $( awk '{print $1, $2, $10}' file ) )

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2014-03-02
    • 2015-02-06
    • 2019-07-24
    • 2019-11-24
    相关资源
    最近更新 更多