繁体   English   中英

从一个 awk 命令设置多个变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM