linux - 在 BASH 脚本中使用 'awk' 将列添加到 CSV 文件的末尾

标签 linux bash parsing awk

如何使用变量中的字符串将列添加到 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

最佳答案

您可以在 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

关于linux - 在 BASH 脚本中使用 'awk' 将列添加到 CSV 文件的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506810/

相关文章:

linux - 如何创建具有可变参数/参数的 bash 函数以 grep 多个关键字/标签

linux - 圣人安装丢失文件

c - 如何在不使用 ncurses 的情况下在 linux 终端上设置终端背景颜色?

c# - 给定 BNF 语法输出 C# 的解析器生成器?

ios - 如何从 Objective-C 中的文本文件解析坐标?

解析javacc中的特定行数

windows - 我应该在 Linux 还是 Windows 中交叉编译?

bash - 如何检测我的 upstart 脚本是否正在运行?

bash - 明确判断当前运行的 shell 是 bash 还是 zsh

regex - 在 Bash 中使用逗号分隔的字符串作为变量的输入