在" |"的末尾添加一个新列。 (管道)分隔文件

时间:2018-01-25 22:32:59

标签: 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-01-25

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  1. 我认为您可以使用$sed$column
  2. 来实现

    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

    ,否则它无法在Mac上运行
    1. 根据您的意见,您的要求似乎比原始问题更简单,在这种情况下,您可以执行以下命令:

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

    2. 如果输出适合您,则可以将文件替换为修改

      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)。这就是我要替换的结尾。 $()是命令替换,这意味着,它执行命令并使用它的输出来替换行的结尾