以不同的方式调用awk脚本

  • 本文关键字:调用 awk 脚本 方式 awk
  • 更新时间 :
  • 英文 :


我编写了一个名为c_awk.awkawk脚本,并希望像awk -f c_awk.awk file.csv一样调用。

脚本如下:

awk 'BEGIN{FS=OFS=","}
NR==FNR && 
$7{sum+=$7; 
elementos++; 
next}
!$7{$7=media}
{print}
ENDFILE{media=sum/elementos}' train.csv train.csv 

在终端中进行复制粘贴时,该文件可以工作。通过执行它:gawk -f c_awk.awk,出现错误:

gawk: c_awk.awk:4: awk 'BEGIN{FS=OFS=","}
gawk: c_awk.awk:4:     ^ carácter «'» inválido en la expresión
gawk: c_awk.awk:4: awk 'BEGIN{FS=OFS=","}
gawk: c_awk.awk:4:     ^ syntax error

我不知道我做错了什么。你能帮我吗?

被调用的文件如下:(来自Kaggle的train.csv,Titanic(

PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S
6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q
7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S

谢谢。

GNUAWK关于选项的手册指出

-f source-file
--file source-file

从源文件读取awk程序源,而不是在第一个nonoption参数中。此选项可以多次给定;这个awk程序由每个指定的源文件。(…(

所以所选文件应该只包含,而不是整个命令。举个简单的例子,假设您想获得第一列,那么您可以创建具有以下内容的firstcol.awk

{print $1}

并按以下使用

awk -f firstcol.awk file1.txt file2.txt file3.txt

您可以选择为文件配备shebang并使其可执行,在这种情况下,firstcol.awk内容是

#!/usr/bin/awk -f
{print $1}

使用

./firstcol.awk file1.txt file2.txt file3.txt

如果你想看到其他的例子,请查阅维基图书中的AWK。

解决方案包括以下更改:

BEGIN{FS=OFS=","}
NR==FNR && 
$7{sum+=$7; 
elementos++; 
next}
!$7{$7=media}
{print}
ENDFILE{media=sum/elementos}

最新更新