unix 如何使用sed,awk在txt文件的第4个位置添加列?

odopli94  于 2022-11-04  发布在  Unix
关注(0)|答案(1)|浏览(196)

我有一个包含以下内容的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

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

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

有没有什么方法可以使用Linux命令(如sed、awk)来完成此操作?
我试过了,但没有用:

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

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

busg9geu

busg9geu1#

您可以使用此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

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

相关问题