您想将FS
(字段分隔符)和OFS
(输出字段分隔符)设置为选项卡:
awk '$2==120{$2=1201}1' FS='\t' OFS='\t' file
OFS
是这里的重要变量,因为awk
它使用它的值来分隔输出中的字段。
编辑:
的结构awk
是conditional{block}
,如果条件评估为 TRUE,则执行该块。因此,$2==120{$2=1201}
条件是$2==120
如果第二个字段的值是 120,并且块被{$2=1201}
分配给第二个字段的值 1201。默认块awk
是{print $0}
这样的:
awk '$2==120{$2=1201}{print $0}'
可以重写为:
awk '$2==120{$2=1201}1'
其中 1 是始终评估为 TRUE 的条件,因为我们没有指定块,{print $0}
所以执行默认值。
对于多个条件,只需添加更多结构,即:
awk '$2==120{$2=1201}$3==130{$3==1301}1'
这更像是一种if
if
结构,因为两个块都可以执行,并且if
else
会使用该next
语句跳转到文件中的下一行,即:
awk '$2==120{$2=1201;next}{$2==1202}1'
如果在这里执行第一个块,则第二个字段取值 1201,我们抓取下一行,否则第二个字段将取值 1202。所以第二个字段将始终取一个新值,要么1201
要么1202
。
一个if
elif
将是:
awk '$2==120{$2=1201;next}$3==130{$3==1301}1'
这里第二个字段可能会取一个新值,如果是这样,即使条件为真,第三个字段也不会更新,因为它永远不会被评估。仅当第一个条件为 FALSE 且第二个条件为 TRUE 时,才能更新第三个字段。