Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在“的末尾添加一个新列”|&引用;(管道)分隔文件_Linux_Shell - Fatal编程技术网

Linux 在“的末尾添加一个新列”|&引用;(管道)分隔文件

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

我有一个以管道分隔的文本文件,我想在文件的每一行末尾添加一个新的日期列。我的文件中有大约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
谢谢你的帮助

  • 我想你可以用
    $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,$s/$/|$(日期+%Y-%m-%d)/
      :在第2行的每一行末尾添加|(今天的日期)
    • s/\>|/|/g
      :如果不存在,则在每个|之前强制一个空格
    • 列-t
      :格式化列中的输入
    除非您安装gnu sed并使用
    gsed
    而不是
    sed

  • 根据您的评论,您的需求似乎比原始问题更简单,在这种情况下,您可以执行以下命令:

    sed的/$/|$(日期+%Y-%m-%d)/”文件

  • 如果输出适合您,则可以使用修改替换该文件

    sed -ibak 's/$/|$(date +%Y-%m-%d)/' file
    
    说明:

    -我的意思是就地编辑文件,您可以添加扩展名以获取备份(这里是bak)

    s/$/|$(日期+%Y-%m-%d)/”

    • s
      意味着我要替换
    • /
      是分隔符
    • $
      表示行尾。因此,我将替换每行的末尾
    • |$(日期+%Y-%m-%d)
      。这是我将要用它来代替线的末端$()是命令替换,这意味着它执行命令并使用命令的输出替换行的结尾

    您能在示例中包含“空值”吗?我已经用文件中的空查询示例更新了问题。我想要的是当前日期而不是硬编码日期。该命令还将把输出保存到文件中,或者只打印输出。谢谢你回答这个问题。这将把结果打印到stdout。我想您可以使用>将其重定向到您的文件。要获取当前日期,可以使用
    date
    命令。今天晚些时候,我会相应地更新我的答案。我尝试了更新后的命令,但它没有将结果输出到stdout中。当我在-t列后添加>和文件名时,什么都没有发生。文件未更新您运行的操作系统是什么?你能试着一个接一个地添加sed语句吗?我们将看到哪个语句不适合你
    sed'1s/$/| Date/'文件
    ,我们将看到是否添加了日期,然后是第二部分,因此我将在Windows 7上运行它。我尝试了您发布在这里的最新命令,但它没有输出任何结果。当我添加>和相同的文件名时,它也没有更新文件。