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

Sir*_*cle 18 linux bash awk parsing

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

input.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
Run Code Online (Sandbox Code Playgroud)

output.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
Run Code Online (Sandbox Code Playgroud)

awk.sh

#!/bin/bash

awk -F"," '{$6="2012-02-29 16:13:00" OFS $6; print}' input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)

我在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
Run Code Online (Sandbox Code Playgroud)

感谢任何帮助!

更新了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
Run Code Online (Sandbox Code Playgroud)

Bir*_*rei 22

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

awk -F"," 'BEGIN { OFS = "," } {$6="2012-02-29 16:13:00"; print}' input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

编辑回答评论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.
Run Code Online (Sandbox Code Playgroud)

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

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


Jon*_*ler 13

我会做:

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

这个硬编码值,但代码也是如此.

或者您可以使用sed:

sed 's/$/,2012-02-29 16:13:00/' input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)

  • 或者:'awk -v date ="2012-02-29 16:13:00"-v OFS =,'{print $ 0,date}'` (2认同)