【问题标题】:Update value in a unix text file更新 Unix 文本文件中的值
【发布时间】:2013-10-31 08:14:18
【问题描述】:

我的输入文本文件(abc.txt)如下,

2013-10-15 00:58:59.2557431|Florida|12345|

我需要如下输出文本

2013-10-15 00:58:59.2557431|2013-10-15|Florida|12345|

也就是说,我需要单独提取日期部分并将其添加为输出文本文件中的第二个字段。

【问题讨论】:

  • sedawkperlcc++,可能还有更多。就语言而言,您知道什么?

标签: bash file unix text sed


【解决方案1】:

sed:

$ sed -r 's/([^ ]*) ([^|]*)/\1 \2|\1/' file
2013-10-15 00:58:59.2557431|2013-10-15|Florida|12345|
2013-11-19 10:58:59.2544743|2013-11-19|Chicago|92345|
2013-12-19 11:58:59.2517431|2013-12-19|Ohio|13335|

它将块捕获到空间(1) 和管道(2),然后打印(1) (2)|(1)

也可以用 awk 来完成,采用两个不同的字段分隔符(| 和空格),但是您必须指定每个输出字段分隔符,因此最终结果读起来有点难看。

【讨论】:

  • 日期后的空格丢失。
  • 更正 sedversion: sed -r 's/([^ ]*) ([^|]*)/\1 \2|\1/'
  • 嗯,当然@Jotne,没看到。感谢告知!不过,无需投反对票。
【解决方案2】:

使用awk的解决方案

awk -F\| '{split($1,a," ");$2=a[1] OFS $2}1' OFS=\|
2013-10-15 00:58:59.2557431|2013-10-15|Florida|12345|

【讨论】:

  • 好主意。由于它们相同,您也可以使用BEGIN{OFS=FS="|"}
  • 我知道,但我的打字少:) 也可以在最后使用FS=\| OFS=\|
  • 但是如果它碰巧有另一个字段分隔符,你必须键入两次才能更改它:)
猜你喜欢
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2014-06-07
  • 2021-11-01
  • 2015-06-22
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多