Shell 如何更改新添加列中第一行的值

Shell 如何更改新添加列中第一行的值,shell,awk,Shell,Awk,我有一个名为file1.txt的文件,其中包含以下数据 APPLICATION ODATE IF_EXECUTING APPLICATION_STATUS Job1 20200731 Post NOTOK Job2 20200731 Post NOTOK Job3 20200731 Post NOTOK JOb3 20200731 Post

我有一个名为file1.txt的文件,其中包含以下数据

APPLICATION ODATE       IF_EXECUTING  APPLICATION_STATUS
Job1        20200731    Post          NOTOK
Job2        20200731    Post          NOTOK
Job3        20200731    Post          NOTOK
JOb3        20200731    Post          NOTOK
使用下面的命令添加一个新列

awk -v column=4 -v value="four" 'BEGIN {FS = OFS = "\t\t\t";}{for ( i = NF + 1; i > column; i-- ) {$i = $(i-1);}$i = value;print $0;}' file1.txt
输出:

APPLICATION ODATE       IF_EXECUTING  APPLICATION_STATUS                      four
Job1        20200731    Post          NOTOK                   four
JOb2        20200731    Post          NOTOK                   four
Job3        20200731    Post          NOTOK                   four
JOb4        20200731    Post          NOTOK                   four
此处添加三个“\t”字符。第一行“四”应与应用程序状态隔开一个\t,第一行“四”应替换为“循环编号”

期望输出:

APPLICATION ODATE       IF_EXECUTING  APPLICATION_STATUS    CYCLE_NUMBER
Job1        20200731    Post          NOTOK                 four
JOb2        20200731    Post          NOTOK                 four
Job3        20200731    Post          NOTOK                 four
JOb4        20200731    Post          NOTOK                 four

请您尝试使用GNU
awk
中显示的样本编写并测试以下内容

awk -v val="four" -v header="CYCLE_NUMBER" '
FNR==1{
  print $0,header
  next
}
{
  print $0,val
}
'  Input_file | column -t
或者根据@Cyrus sir的评论,如果您想在
awk
本身内执行,请尝试以下操作

awk -v val="\t\t\tfour" -v header="\tCYCLE_NUMBER" '
FNR==1{
  print $0,header
  next
}
{
  print $0,val
}
'  Input_file
解释:为上述代码添加解释。第二个解决方案也更类似于第一个解决方案,唯一的事情是第二个解决方案中没有
命令,制表符打印是在
awk
变量本身中处理的

awk -v val="four" -v header="CYCLE_NUMBER" '   ##Starting awk program from here with val value of four and header value of CYCLE_NUMBER here.
FNR==1{                           ##Checking condition if FNR==1 then do following.
  print $0,header                 ##Printing current line and header value here.
  next                            ##next will skip all further statements from here.
}
{
  print $0,val                    ##Printing current line with val here.
}
'  Input_file | column -t         ##Mentioning Input_file name here and sending output of awk command to column command to get it in good manner.

当我使用awk-v val=“\t\t\tfour”-v header=“\tCYCLE\u NUMBER”时,也可以使用
-v val=“\t\t\tfour”-v header=“\tCYCLE\u NUMBER”
并删除
列-t
打印$0,(NR>1?val:header)
'file1.txt它正在添加额外的标题行,如下面的应用程序ODATE IF_EXECUTING APPLICATION\u STATUS CYCLE\u NUMBER APPLICATION ODATE IF_EXECUTING APPLICATION\u STATUS CYCLE_NUMBER@SourinBiswas,这两种解决方案对我都很有效,但您可以使用
column
命令尝试我的第一种解决方案,并告诉我这是否对您有帮助?@SourinBiswas您从发布的脚本中删除了
下一个
语句。不要在这里重新键入答案,复制/粘贴它们。