我正在尝试编写一个BASH脚本,它将:00:00 附加到CSV文件的第二个字段中所有值的末尾。
我试过阅读'awk'手册页,但我不知道如何完成这个。任何帮助表示赞赏!
2012-02-29,00,Manhatten,New York,244
2012-02-29,01,Manhatten,New York,246
2012-02-29,02,Manhatten,New York,554
2012-02-29,03,Manhatten,New York,854
2012-02-29,04,Manhatten,New York,488
2012-02-29,00:00:00,Manhatten,New York,244
2012-02-29,01:00:00,Manhatten,New York,246
2012-02-29,02:00:00,Manhatten,New York,554
2012-02-29,03:00:00,Manhatten,New York,854
2012-02-29,04:00:00,Manhatten,New York,488
答案 0 :(得分:1)
以下是过滤转化的命令:
awk 'BEGIN { FS=","; OFS="," } (NF>=2) { $2=$2 ":00:00"; } (1)'
如果您有一个存储源数据的文件source.txt
和要存储输出的文件result.txt
,则执行以下命令:
awk 'BEGIN { FS=","; OFS="," } (NF>=2) { $2=$2 ":00:00"; } (1)' source.txt >result.txt
如果您有多个输入文件,可以在参数中添加它们。 有关详细信息,请参阅manpage of awk。
答案 1 :(得分:0)
一个带perl的衬里
perl -F, -nae '$F[1].=":00:00";print join(",", @F);'
答案 2 :(得分:0)
您也可以使用sed
(这是我的首选),但使用awk
也很好..
您需要的是在每列中提取值,然后将其打印回来,但在打印第二列时,请附加:00:00
。
请参阅此示例,尝试一下,如果您有一些具体问题请回去:
$ cat a.txt
2012-02-29,00,Manhatten,New York,244
2012-02-29,01,Manhatten,New York,246
2012-02-29,02,Manhatten,New York,554
2012-02-29,03,Manhatten,New York,854
2012-02-29,04,Manhatten,New York,488
$ awk -F , '{print $1 "-" $2 "-" $3 "-" $4 "-" $5}' a.txt
2012-02-29 - 00 - Manhatten - New York - 244
2012-02-29 - 01 - Manhatten - New York - 246
2012-02-29 - 02 - Manhatten - New York - 554
2012-02-29 - 03 - Manhatten - New York - 854
2012-02-29 - 04 - Manhatten - New York - 488
$
答案 3 :(得分:0)
这可能对您有用:
sed 's/,/:00:00,/2' file
2012-02-29,00:00:00,Manhatten,New York,244
2012-02-29,01:00:00,Manhatten,New York,246
2012-02-29,02:00:00,Manhatten,New York,554
2012-02-29,03:00:00,Manhatten,New York,854
2012-02-29,04:00:00,Manhatten,New York,488
或者这个:
awk '{sub(/,../,"&:00:00")}1' file
2012-02-29,00:00:00,Manhatten,New York,244
2012-02-29,01:00:00,Manhatten,New York,246
2012-02-29,02:00:00,Manhatten,New York,554
2012-02-29,03:00:00,Manhatten,New York,854
2012-02-29,04:00:00,Manhatten,New York,488