【问题标题】:awk to save changes in csvawk 在 csv 中保存更改
【发布时间】:2022-01-22 21:15:16
【问题描述】:

我写了以下代码:

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

awk 脚本将平均年龄添加到“年龄”列的空单元格中。

代码执行如下:

awk -f c_awk.awk train3.csv

现在我正在尝试使用awk 将所做的更改保存在一个新的 CSV 文件中。 (新文件:train4.csv)

我一直在尝试 > ./c_awk.awk/train4.csv 在最后一行,但它不起作用。

awk: c_awk.awk:12:      ENDFILE{media=sum/elementos}> /tmp/train4.csv
awk: c_awk.awk:12:                                  ^ syntax error
awk: c_awk.awk:12:      ENDFILE{media=sum/elementos}> /tmp/train4.csv
awk: c_awk.awk:12:                                               ^ syntax error

我尝试实施更改的文件如下所示:

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

预期结果如下:

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

谢谢。

【问题讨论】:

  • 您询问了如何将 awk 脚本的输出重定向到文件,我们向您展示了如何做到这一点。如果您的 awk 脚本没有产生您想要的输出,并且您还需要帮助让您的 awk 脚本产生该输出,然后提出一个新问题 - 一次只问一个问题,以便将来有类似问题的其他人可以搜索档案找到答案。见How to Ask

标签: csv awk


【解决方案1】:
awk -f c_awk.awk train3.csv > /tmp/train4.csv

或者只是将{print} 更改为{print > "/tmp/train4.csv"}

您的脚本包含几个与写入新文件无关的问题,我怀疑您不知道 - 您应该发布一个包含简洁、可测试示例输入和预期输出的新问题,以便我们可以帮助您解决这个问题,因为它不是完全清楚您希望该脚本做什么

【讨论】:

  • 对不起,你是对的。我添加了数据集的一些行。我正在尝试在脚本 awk 中保存为新的 csv 文件,而不是在执行时保存。我想这也是可能的,不是吗?
  • 是的,这是可能的,我刚刚更新了我的问题以表明这一点。您添加了输入,但没有添加预期输出 - 请创建一个新问题,但这次显示示例输入和预期输出,因为您的脚本确实有几个问题需要解决,但它们与这个问题无关您询问了如何将输出写入文件。
  • 谢谢。我得到了结果输出代码的行,你的意思是我也应该在这里包含它吗?我认为这个特定问题没有必要这样做。
  • 输出将保存在一个 CSV 文件中,无论你说什么文件应该在你指定的目录路径中命名。如果您指定输出应该转到/tmp/train4.csv,正如您在问题中的代码中显示的那样,因此我在答案中的代码中使用,那么输出将出现在目录@ 中的文件train4.csv 中987654327@ 和你说的完全一样。
  • 不,如果您想打印到您正在运行脚本的目录中的一个文件,则它只是 print > "train4.csv",请参阅我在您上一个问题中的评论,stackoverflow.com/questions/70433149/…。关于您对{print > "/`pwd`/train4.csv"} 的建议- awk 不是shell,您不能使用像tick 这样的shell 结构来执行命令,甚至不能直接从awk 调用像pwd 这样的Unix 命令。来自C 程序。
猜你喜欢
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 2011-08-29
  • 2011-03-14
相关资源
最近更新 更多