您想将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 语句跳转到文件中的下一行即: em>
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 时,才能更新第三个字段。