[英]set multiple variables from one awk command?
这是一个非常常见的脚本:
#!/bin/bash
teststr="col1 col2"
var1=`echo ${teststr} | awk '{print $1}'`
var2=`echo ${teststr} | awk '{print $2}'`
echo var1=${var1}
echo var2=${var2}
但是我不喜欢这样,尤其是当有更多字段要解析时。 我想应该有更好的方法,例如:
(var1,var2)=`echo ${teststr} | awk '{print $1 $2}'(在我的想象中)
是这样吗? 感谢您帮助提高效率并节省一些 CPU 功率。
这可能对你有用:
var=(col0 col1 col2)
echo "${var[1]}"
col1
Bash 有数组支持,我们只需要动态提供值:)
function test_set_array_from_awk(){
# Note : -a is required as declaring array
let -a myArr;
# Hard Coded Valeus
# myArr=( "Foo" "Bar" "other" );
# echo "${myArr[1]}" # Print Bar
# Dynamic values
myArr=( $(echo "" | awk '{print "Foo"; print "Bar"; print "Fooo-And-Bar"; }') );
# Value @index 0
echo "${myArr[0]}" # Print Foo
# Value @index 1
echo "${myArr[1]}" # Print Bar
# Array Length
echo ${#myArr[@]} # Print 3 as array length
# Safe Reading with Default value
echo "${myArr[10]-"Some-Default-Value"}" # Print Some-Default-Value
echo "${myArr[10]-0}" # Print 0
echo "${myArr[10]-''}" # Print ''
echo "${myArr[10]-}" # Print nothing
# With Dynamic Index
local n=2
echo "${myArr["${n}"]-}" # Print Fooo-And-Bar
}
# calling test function
test_set_array_from_awk
Bash 阵列文档: http : //tldp.org/LDP/abs/html/arrays.html
您还可以使用 shell set
builtin 将空格分隔(或更准确地说, IFS
分隔)放入变量$1
、 $2
等中:
#!/bin/bash
teststr="col1 col2"
set -- $teststr
echo "$1" # col1
echo "$2" # col2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.