Linux 在“的末尾添加一个新列”|&引用;(管道)分隔文件
我有一个以管道分隔的文本文件,我想在文件的每一行末尾添加一个新的日期列。我的文件中有大约100行,因此我想为每一行将当前日期列添加到我的文件中。文本文件也包含一些空值 以下是该文件的一个示例:Linux 在“的末尾添加一个新列”|&引用;(管道)分隔文件,linux,shell,Linux,Shell,我有一个以管道分隔的文本文件,我想在文件的每一行末尾添加一个新的日期列。我的文件中有大约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
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
谢谢你的帮助
$sed
和$column
sed-e'1s/$/| Date/'-e“2,\$s/$/|$(Date+%Y-%m-%d)/“-e's/\>\/|/g”文件|列-t
输出:
Id |Num |Name |Date
1 |24 |Sam |2018-01-26
2 |3 |John |2018-01-26
3 | |James |2018-01-26
解释
:将|日期添加到第一行的末尾1s/$/|日期/
:在第2行的每一行末尾添加|(今天的日期)2,$s/$/|$(日期+%Y-%m-%d)/
:如果不存在,则在每个|之前强制一个空格s/\>|/|/g
:格式化列中的输入列-t
gsed
而不是sed
sed -ibak 's/$/|$(date +%Y-%m-%d)/' file
说明:
-我的意思是就地编辑文件,您可以添加扩展名以获取备份(这里是bak)
s/$/|$(日期+%Y-%m-%d)/”
意味着我要替换s
是分隔符/
表示行尾。因此,我将替换每行的末尾$
。这是我将要用它来代替线的末端$()是命令替换,这意味着它执行命令并使用命令的输出替换行的结尾|$(日期+%Y-%m-%d)
date
命令。今天晚些时候,我会相应地更新我的答案。我尝试了更新后的命令,但它没有将结果输出到stdout中。当我在-t列后添加>和文件名时,什么都没有发生。文件未更新您运行的操作系统是什么?你能试着一个接一个地添加sed语句吗?我们将看到哪个语句不适合你sed'1s/$/| Date/'文件
,我们将看到是否添加了日期,然后是第二部分,因此我将在Windows 7上运行它。我尝试了您发布在这里的最新命令,但它没有输出任何结果。当我添加>和相同的文件名时,它也没有更新文件。