使用If语句在awk中分配变量

使用If语句在awk中分配变量,awk,Awk,我正在尝试创建一个awk脚本文件,它接受一个输入文件,并将前三行的第四列信息转换为一行。 例如,如果input.txt如下所示: XX YY val1 1234 XX YY val2 2345 XX YY val3 3456 stuff random garbage junk extrajunk useless 343059 random3 我想将第1、2和3行的第四列打印到一行中: 1234 2345 3456 我试图通过使用if/else if语句来实现这一点,因此我的文件现在看起来如下

我正在尝试创建一个awk脚本文件,它接受一个输入文件,并将前三行的第四列信息转换为一行。 例如,如果input.txt如下所示:

XX YY val1 1234
XX YY val2 2345
XX YY val3 3456
stuff random garbage junk extrajunk
useless 343059 random3
我想将第1、2和3行的第四列打印到一行中:

1234 2345 3456
我试图通过使用if/else if语句来实现这一点,因此我的文件现在看起来如下所示:

#!/usr/bin/awk -f

{
    if ($1 == "XX" && $3 == "val1") 
    {
             var1=$4; 
    }  
    else if ($1 == "XX" && $3 == "val2") 
    {
             var2=$4; 
    }
    else if ($1 == "XX" && $3 == "val3") 
    {
             var3=$4; 
    }
}
结束{ 打印var1,var2,var3

然后我会在一行上打印变量。但是,当我尝试实现这一点时,我得到了指向var2=$4行中“=”符号的语法错误

编辑

解决了,在我的真实文件中,我把变量命名为funky(但是描述性的)名称,这把一切都搞砸了


谢谢你可以这样写

$ awk '$1=="XX"{if($3=="val1") var1=$4
                else if($3=="val2") var2=$4
                else if($3=="val3") var3=$4}
        // .. do something with the vars ....
但是,如果只想打印前3行的第四列

$ awk '{printf "%s ", $4} NR==3{exit}' ile
1234 2345 3456

你可以这样写

$ awk '$1=="XX"{if($3=="val1") var1=$4
                else if($3=="val2") var2=$4
                else if($3=="val3") var3=$4}
        // .. do something with the vars ....
但是,如果只想打印前3行的第四列

$ awk '{printf "%s ", $4} NR==3{exit}' ile
1234 2345 3456
请尝试以下方法:

#!/bin/env bash
awk '
$1 == "XX" { var[$3] = $4 }
END { print var["val1"], var["val2"], var["val3"] }
' "$@"
根据您的实际需求,几乎可以肯定有一个更简单的解决方案,例如:

awk '
{ vars = (NR>1 ? vars OFS : "") $4 }
NR == 3 { print vars; exit }
' "$@"
。为了便于将来的增强(如果没有其他功能的话),请不要从shebang调用awk,只需显式地调用它。

尝试以下方法:

#!/bin/env bash
awk '
$1 == "XX" { var[$3] = $4 }
END { print var["val1"], var["val2"], var["val3"] }
' "$@"
根据您的实际需求,几乎可以肯定有一个更简单的解决方案,例如:

awk '
{ vars = (NR>1 ? vars OFS : "") $4 }
NR == 3 { print vars; exit }
' "$@"

。为了便于将来的增强(如果没有其他功能的话),请不要从shebang中调用awk,只需显式地调用它。

欢迎使用SO,特别感谢您以代码的形式展示您的努力(继续).但是你的问题不清楚,总是建议在你的问题中添加输入/输出示例,所以请添加相同的示例,然后让我们知道。如果这些语句在awk代码的主体中,是否简单地提醒你需要在这些语句周围加上
{brages…}
?否则你会得到随机语法错误(与awk版本相关的随机…)发布一个演示您的问题的最小完整脚本。这是我在实际变量名中犯的一个简单错误!谢谢大家!欢迎访问SO,特别感谢您以代码的形式展示您的努力(继续).但是你的问题不清楚,总是建议在你的问题中添加输入/输出示例,所以请添加相同的示例,然后让我们知道。如果这些语句在awk代码的主体中,是否简单地提醒你需要在这些语句周围加上
{brages…}
?否则你会得到随机语法错误(与awk版本相关的随机…)发布一个演示您的问题的最小完整脚本。这是我在实际变量名中犯的一个简单错误!谢谢大家!