【问题标题】:why is awk not writing variable to csv file? [duplicate]为什么 awk 不将变量写入 csv 文件? [复制]
【发布时间】:2021-08-16 14:38:45
【问题描述】:

我有一个 csv 文件,我需要在最后添加一些列。新列是取自其他文件的变量。

STNO=3389
STNNAME=SWORDS

awk -F "," '{ stnname='"$STNNAME"';stno='"$STNO"';print $0","stnname","stno }' infile

输出示例。

992501062,-6.278983000,202105210736,,3389

stno 写得很好,但 stnname 是空白的。看来我可以使用数字变量,但不能使用文本。

任何帮助表示赞赏。 谢谢。

【问题讨论】:

  • 感谢您的努力,抱歉,但不清楚,您能否在此处详细说明您要达到的目标,谢谢(不是我的反对票)。
  • @RavinderSingh13 道歉我不够清楚,我对此很陌生,并试图尽可能简洁。谢谢回复
  • 我怀疑有一种更好的方法,只需在 CSV 和要从中填充这些变量的文件上运行 awk,而不是先在 shell 中提取它们的值。

标签: awk


【解决方案1】:

您正在插入文字符号SWORDS,显然您希望插入带引号的字符串。 awk 没有名为 SWORDS 的变量,因此它解析为一个空字符串。

更好的卫生和稳定性是避免将垃圾直接插入到您的 Awk 脚本中。在 awk 命令行上使用 -v 来传递值。

awk -v stnname="$STNNAME" -v stno="$STNO" 'BEGIN {FS=OFS=","}
{ print $0, stnname , stno }' infile

切线,avoid upper case for your private shell variables.

【讨论】:

    【解决方案2】:

    很容易迷失在引用的海洋中。也许像这样使用-v 捕获环境变量:

    awk -v stnname="$STNNAME" -v stno="$STNO" -F "," '{ print $0,stnname,stno }' infile
    

    那么你可以直接在命令中使用它们而不用拼凑一个字符串

    【讨论】:

    • 您还需要将OFS 设置为逗号。
    • 是的 - 我专注于 -v 位......你的答案就是全部
    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 2016-06-02
    • 2018-05-22
    • 2023-01-25
    • 2016-02-28
    • 2022-08-15
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多