如何从awk中的外部循环中获取字段值(或)如何在awk中动态获取字段数?

时间:2017-04-13 20:21:47

标签: bash awk

当我们使用AWK时,1美元用于打印第一个字段,$ 2用于第二个字段,等等。我试图在一个for循环中进行第一次迭代,我需要首先提交打印,第二次迭代第二次提交打印....我尝试下面。

例1:

var="sri|ram|good|boy" for i in {1..4}{ var1=$($var|awk -F'|' -v x=$i '{print $x}'); }

我是AWK的新手,这是可能的还是有其他方法可以解决这个问题,建议就此。

示例2:

var2="I dont know awk";
for i in {1..5}{
read inputfiled;
echo "$var2"|awk '{print $inputfiled}'        #syntax wrong

}

如果我将输入值设为 1 ,则应打印,如果我将输入值设为 3 ,则应打印知道

任何一个答案都可以帮助我。

2 个答案:

答案 0 :(得分:0)

awk 是一款功能强大的工具,支持循环。在您的简单情况下,应用以下方法就足够了:

var="sri|ram|good|boy"
echo $var | awk -F'|' '{for(i=1;i<=NF;i++) print $i}'

输出:

sri
ram
good
boy

NF - 指向字段总数。

答案 1 :(得分:0)

另一种有趣的方式:

$ echo $var | awk -F\| -v OFS='\n' '{$1=$1}1'
sri
ram
good
boy

$1 = $1导致使用输出文件分隔符(OFS)替换输入文件分隔符(FS)来重建行。尾随1打印该行(是一个解析为true的模式,触发默认操作,即打印该行)。