我编写了一个名为c_awk.awk
的awk
脚本,并希望像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}