[英]Bash: How to add character at the end of a line if it doesn't exist?
假设我在一个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实现这一目标?
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
您可以使用此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个或多个逗号,并替换为给定的字符串。
假设csv字段不包含逗号,该如何处理:
awk -F, -v OFS=, -v q=\' '{$NF==""? p=NF: p=NF+1; $p=q"2018-10-12"q; print}' file.csv
不需要对列号进行硬编码。
您可以使用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,'约翰',3454,2018-10-12
2343,'迈克',5757,2018-10-12
使用Perl
perl -pe " s/(,)?$/,'2018-10-12'/ "
输入:
$ cat pollpenn.txt
454,'steve',3434
123,'john',3454,
2343,'mike',5757
$ perl -pe " s/(,)?$/,'2018-10-12'/ " pollpenn.txt
454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'
$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.