在 BASH 脚本中使用“awk”将列添加到 CSV 文件的末尾

新手上路,请多包涵

如何使用变量中的字符串将列添加到 CSV 文件的末尾?

输入.csv

 2012-02-29,01:00:00,Manhattan,New York,234
2012-02-29,01:00:00,Manhattan,New York,843
2012-02-29,01:00:00,Manhattan,New York,472
2012-02-29,01:00:00,Manhattan,New York,516

输出.csv

 2012-02-29,01:00:00,Manhattan,New York,234,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,843,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,472,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,516,2012-02-29 16:13:00

awk.sh

 #!/bin/bash

awk -F"," '{$6="2012-02-29 16:13:00" OFS $6; print}' input.csv > output.csv

我在 awk.sh 中的尝试将字符串添加到末尾,但删除了所有逗号分隔符。

awk.sh 结果

2012-02-29 01:00:00 Manhattan New York 234 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 843 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 472 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 516 2012-02-29 16:13:00

感谢任何帮助!

更新了 awk.sh

 #!/bin/bash

GAWK="/bin/gawk"
TIMESTAMP=$(date +"%F %T")
ORIG_FILE="input.csv"
NEW_FILE="output.csv"

#Append 'Create' DateTimeStamp to CSV for MySQL logging
$GAWK -v d="$TIMESTAMP" -F"," 'BEGIN {OFS = ","} {$6=d; print}' $ORIG_FILE > $NEW_FILE
rm -f $ORIG_FILE

原文由 SirOracle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 939
2 个回答

您可以在 OFS (输出字段分隔符)中添加逗号:

 awk -F"," 'BEGIN { OFS = "," } {$6="2012-02-29 16:13:00"; print}' input.csv > output.csv

输出:

 2012-02-29,01:00:00,Manhatten,New York,234,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,843,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,472,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,516,2012-02-29 16:13:00


编辑 回答 SirOracle 的评论:

来自 awk 手册页:

        -v var=val
       --assign var=val
              Assign the value val to the variable var, before execution of the program begins.  Such
              variable values are available to the BEGIN block of an AWK program.

因此,将您的日期分配给一个 shell 变量并在 awk 中使用它:

 mydate=$(date)
awk -v d="$mydate" -F"," 'BEGIN { OFS = "," } {$6=d; print}' input.csv > output.csv

原文由 Birei 发布,翻译遵循 CC BY-SA 3.0 许可协议

我会做:

 awk '{ printf("%s,2012-02-29 16:13:00\n", $0); }' input.csv > output.csv

这对值进行了硬编码,但您的代码也是如此。

或者您可以使用 sed

 sed 's/$/,2012-02-29 16:13:00/' input.csv > output.csv

原文由 Jonathan Leffler 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题