创建一个带有一些函数的 awk 文件

创建一个带有一些函数的 awk 文件

我有一些单独工作的功能。我想将它加入到一个 awk 文件中。但是,每次我尝试运行它时,都会返回语法错误。

目录2.awk

awk -F "-" '
BEGIN {
NR==1 {print $0}; 
NR==4 {print $0}};
/[0-9]/ && /N/ {print $1,$2,$3,$4,$5;};
{gsub(/ N0 ./," N0.")}1;
{gsub(/ .25 /,"0.25 ")}1;
{gsub(/ .50 /,"0.50 ")}1;
{gsub(/ .75 /,"0.75 ")}1;
END {print "FIM";}'

文件代码

000224123


                    -       316.0    -      316.00    -         .00   -  N0 .00E  -
                    -       323.0    -      323.00    -         .00   -  N0 .00E  -
                    -       350.0    -      350.00    -         .25   -  N44.00W  -
                    -       380.0    -      380.00    -         .25   -  N74.00E  -
                    -       410.0    -      410.00    -         .25   -  N15.00E  -
                    -       440.0    -      440.00    -         .25   -  N34.00E  -
                    -       470.0    -      470.00    -         .25   -  N54.00E  -
                    -       500.0    -      500.00    -         .25   -  N16.00E  -
                    -       530.0    -      530.00    -         .25   -  N07.00E  -
                    -       560.0    -      560.00    -         .25   -  N03.00W  -
                    -       590.0    -      590.00    -         .25   -  N09.00W  -
                    -       620.0    -      620.00    -         .50   -  N18.00W  -
                    -       650.0    -      649.99    -         .50   -  N19.00W  -
                    -       680.0    -      679.99    -         .50   -  N26.00W  -
                    -       710.0    -      709.99    -         .50   -  N13.00W  -
                    -       740.0    -      739.99    -         .75   -  N15.00W  -
                    -       770.0    -      769.99    -         .50   -  N02.00W  -
                    -       800.0    -      799.99    -         .75   -  N01.00W  -

答案1

以下内容可能并不完全符合您的要求,但它至少会运行并且应该是获得所需输出的合理基础:

(很难说出你想要什么,因为不清楚你提供的样本数据是输入还是输出......我假设它是输入)

awk -F "-" '
  NR==1 || NR==4 {print $0; next};

  /[0-9]/ && /N/ {
    gsub(/ N0 \./," N0.");

    gsub(/^ *\./,"0.",$4);

    print $1,$2,$3,$4,$5;
  }

  END {print "FIM";}'

重要的变化是:

  • 摆脱了 BEGIN 块。第 1 行和第 4 行只是逐字打印。请注意该next语句 - 阻止对这些行进行任何进一步处理。
  • 将所有gsub()s 和 the分组print到一个块中,该块仅在匹配的行上执行
  • 转换gsub()发生在打印语句之前。
  • 折叠这三个gsub()操作,将字段 4 中的十进制数固定为前面加上0if $4 以零个或多个空格和..

相关内容