【发布时间】: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 来捕获此类问题