2017-08-29 58 views
-1

我需要替换大文件的头中的日期。所以我有多个列头,使用|(管)作为分隔符,像这样: A | B05 | 1 | xxc | 2018/06/29 | AC23 | SoOn替换一个大的.txt文件头中的列--unix

所以我需要相同的标题,但与日期(第五列)更新:A | B05 | 1 | xxc | 2018/08/29 | AC23

对我有什么解决方案?我用awk和sed尝试过,但他们两个都带我比我更大的错误。我是新手,我真的很想理解这个解决方案。那么你能帮我吗?

+1

显示您的工作和错误消息。 –

回答

0

您可以使用下面的命令,从每一行替换第5列与newdate变量的内容:

awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}{ $5 = newdate }1' infile > outfile 

说明

awk -v newdate="2018/08/29" ' # call awk, and set variable newdate 
    BEGIN{ 
      FS=OFS="|"   # set input and output field separator 
    } 
    { 
      $5 = newdate   # assign fifth field with a content of variable newdate 
    }1       # 1 at the end does default operation 
           # print current line/row/record, that is print $0 
    ' infile > outfile 

如果你想柜面跳到第一线如果你有头,然后使用FNR>1

awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR>1{ $5 = newdate }1' infile > outfile 

如果你要替换第1行第5列才使用FNR==1

awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR==1{ $5 = newdate }1' infile > outfile 

如果你仍然有问题,与样品输入和 预期输出帧你的问题,从而使这将很容易解释你的问题。

+1

这是可怕的。对我来说正确的解决方案是最后一个,并正常工作。非常感谢! – Light

0

SED溶液:

sed -Ei '1s~\|[0-9]{4}/[0-9]{2}/[0-9]{2}\|~|2018/08/29|~' file 
  • -i - 修改文件就地

  • 1s - 代替仅在第一(标题)线

  • [0-9]{4}/[0-9]{2}/[0-9]{2} - 日期模式

+0

你好,谢谢你的回答。当我使用你的解决方案时,我收到一条错误消息<< sed:1:“header.txt”:在h命令结尾的额外字符>> – Light

+0

@Light,它应该在Linux上工作。你在MacOS上吗? – RomanPerekhrest

+0

是的,我在MacOs上做了一些测试 – Light

相关问题