如何使用 sed、awk 在 txt 文件的第四个位置添加一列?

Neo*_*ron 0 unix linux awk

我有一个包含以下内容的 txt 文件:

   name    space   valid   date1        date2 
   abc     mon     yes    2022-10-10   2022-10-10
   def     tue     yes    2022-10-10   2022-10-10
   ghi     wed     yes    2022-10-10   2022-10-10
   jkl     thu     yes    2022-10-10   2022-10-10
Run Code Online (Sandbox Code Playgroud)

我需要在文件的第四个位置添加一列,其中包含标题“位置”和内容,如下所示。

   name    space   valid   location     date1        date2 
   abc     mon     yes    newyork    2022-10-10   2022-10-10
   def     tue     yes    newyork    2022-10-10   2022-10-10
   ghi     wed     yes    newyork    2022-10-10   2022-10-10
   jkl     thu     yes    newyork    2022-10-10   2022-10-10

Run Code Online (Sandbox Code Playgroud)

有没有办法使用 sed、awk 等 Linux 命令来做到这一点?

我尝试了这个但没有成功:

awk 'BEGIN {FS=OFS=","} NR==1{$0="name, space, valid, location, date1, date2"} NR>1{$3=sprintf("\t,%s",$3)}1' values.txt
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。谢谢!

anu*_*ava 5

您可以使用这个awk解决方案:

awk 'BEGIN {FS=OFS="\t"}
{$3 = $3 OFS (NR == 1 ? "location" : "newyork")} 1' file

name  space  valid  location  date1       date2
abc   mon    yes    newyork   2022-10-10  2022-10-10
def   tue    yes    newyork   2022-10-10  2022-10-10
ghi   wed    yes    newyork   2022-10-10  2022-10-10
jkl   thu    yes    newyork   2022-10-10  2022-10-10
Run Code Online (Sandbox Code Playgroud)

PS:如果所有行都以制表符空格开头,则在上面的命令中使用$4而不是,$3因为第一列将为空。

awk 'BEGIN {FS=OFS="\t"}
{$4 = $4 OFS (NR == 1 ? "location" : "newyork")} 1' file

   name  space  valid  location  date1       date2
   abc   mon    yes    newyork   2022-10-10  2022-10-10
   def   tue    yes    newyork   2022-10-10  2022-10-10
   ghi   wed    yes    newyork   2022-10-10  2022-10-10
   jkl   thu    yes    newyork   2022-10-10  2022-10-10
Run Code Online (Sandbox Code Playgroud)