首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BASH脚本中的'awk‘将列添加到CSV文件的末尾

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

Stack Overflow用户
提问于 2012-02-29 21:20:56
回答 4查看 63.9K关注 0票数 22

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

input.csv

代码语言:javascript
复制
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

output.csv

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/bin/bash

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

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

awk.sh结果

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-29 21:25:40

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

代码语言:javascript
复制
awk -F"," 'BEGIN { OFS = "," } {$6="2012-02-29 16:13:00"; print}' input.csv > output.csv

输出:

代码语言:javascript
复制
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手册页:

代码语言:javascript
复制
       -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中使用它。

代码语言:javascript
复制
mydate=$(date)
awk -v d="$mydate" -F"," 'BEGIN { OFS = "," } {$6=d; print}' input.csv > output.csv
票数 27
EN

Stack Overflow用户

发布于 2012-02-29 21:26:51

我会这样做:

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

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

或者您可以使用sed

代码语言:javascript
复制
sed 's/$/,2012-02-29 16:13:00/' input.csv > output.csv
票数 17
EN

Stack Overflow用户

发布于 2012-02-29 21:28:37

您可以设置OFS (输出字段分隔器):

代码语言:javascript
复制
awk -F"," 'BEGIN { OFS = "," } ; {$6="2012-02-29 16:13:00" OFS $6; print}' input.csv >output.csv

这给了我:

代码语言:javascript
复制
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,
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9506810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档