假设我在csv文件中包含以下文本:
454,'steve',3434
123,'john',3454,
2343,'mike',5757
我想做的是在每一行的末尾插入一个新列。但是,如上面的示例所示,并非所有行的末尾都有逗号。
最终结果应该是
454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'
如何使用bash实现这一目标?
答案 0 :(得分:3)
awk
将解决这个问题。
$ awk -F, -v OFS=, -v d="'2018-10-12'" '{$4=d}1' file
454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'
因为我们知道日期不是空的,所以您可以打高尔夫
$ awk -F, -v OFS=, -v d="'2018-10-12'" '$4=d' file
答案 1 :(得分:2)
您可以使用以下sed
:
sed "s/,\{0,1\}$/,'2018-10-12'/" file
454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'
正则表达式模式,*$
最后匹配0个或多个逗号,并替换为给定的字符串。
答案 2 :(得分:1)
假设csv字段不包含逗号,怎么办:
awk -F, -v OFS=, -v q=\' '{$NF==""? p=NF: p=NF+1; $p=q"2018-10-12"q; print}' file.csv
不需要对列号进行硬编码。
答案 3 :(得分:1)
您可以使用Perl
首先,将所有',\ n'替换为'\ n',然后将所有'\ n'替换为',\ n'。
perl -pe 's/,\n/\n/g' file.txt | perl -pe 's/\n/, 2018-10-12\n/g'
454,'史蒂夫',3434,2018-10-12
123,'john',3454,2018-10-12
2343,'mike',5757,2018-10-12
答案 4 :(得分:1)
使用Perl
tsconfig-paths-webpack-plugin
带有输入:
perl -pe " s/(,)?$/,'2018-10-12'/ "