Shell 如何更改新添加列中第一行的值
我有一个名为file1.txt的文件,其中包含以下数据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
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您从发布的脚本中删除了下一个语句。不要在这里重新键入答案,复制/粘贴它们。