我有一些单独工作的功能。我想将它加入到一个 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 中的十进制数固定为前面加上0
if $4 以零个或多个空格和.
.