替换大型 .txt 文件的 header 中的列 - unix

Replace column in header of a large .txt file - unix

我需要替换大文件 header 中的日期。所以我在 header 中有多个列,使用 |(pipe) 作为分隔符,如下所示: A|B05|1|xxc|2018/06/29|AC23|SoOn

所以我需要相同的 header 但日期(第 5 列)已更新:A|B05|1|xxc|2018/08/29|AC23

有什么解决办法吗?我尝试使用 awk 和 sed,但它们都给我带来了比我更大的错误。我是这方面的新手,我真的很想了解解决方案。那你能帮帮我吗?

您可以使用以下命令用新日期变量的内容替换每行的第 5 列:

awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}{  = 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
    }
    { 
            = 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 [=11=]
  ' infile > outfile

如果你想跳过第一行,如果你有 header 那么使用 FNR>1

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

如果您只想替换第一行的第 5 列,请使用 FNR==1

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

If you still have problem, frame your question with sample input and expected output, so that it will be easy to interpret your problem.

sed解决方案:

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

  • 1s - 仅在第 1(header) 行替换

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