我有一个管道分隔的文本文件,我想在文件的每一行的末尾添加一个新的日期列。我的文件中有大约100行,因此我想将当前日期列添加到我的文件中以用于每个行。文本文件也包含一些空值。
以下是该文件的示例:
Id|Num|Name
1 |24 |Sam
2 |3 |John
3 | |James
以下是添加日期列后文件应如何看待
Id|Num|Name |Date
1 |24 |Sam |2018-01-25
2 |3 |John |2018-01-25
3 | |James |2018-01-25
感谢您的帮助。
答案 0 :(得分:1)
$sed
和$column
sed -e '1s/$/|Date/' -e "2,\$s/$/|$(date +%Y-%m-%d)/" -e 's/\>|/ |/g' file | column -t
输出:
Id |Num |Name |Date
1 |24 |Sam |2018-01-26
2 |3 |John |2018-01-26
3 | |James |2018-01-26
说明
1s/$/|Date/
:将|日期添加到第一行的末尾2,$s/$/|$(date +%Y-%m-%d)/
:在第2行的每一行末尾添加|(今天' s日期)s/\>|/ |/g
:在每个|之前强制一个空格如果不存在column -t
:格式化除非您安装gnu-sed并使用gsed
代替sed
根据您的意见,您的要求似乎比原始问题更简单,在这种情况下,您可以执行以下命令:
sed' s / $ / | $(日期+%Y-%m-%d)/'文件
如果输出适合您,则可以将文件替换为修改
sed -ibak 's/$/|$(date +%Y-%m-%d)/' file
说明:
-i means edit file in place and you can add an extension to get a backup (here bak)
s/$/|$(date +%Y-%m-%d)/'
s
表示我要进行替换/
是分隔符$
表示行尾。所以我将替换每行的结尾|$(date +%Y-%m-%d)
。这就是我要替换的结尾。 $()是命令替换,这意味着,它执行命令并使用它的输出来替换行的结尾