1 awk
$ cat awk.txt 
12  32  45
5   2   3
33  11  33
$ cat awk.txt | awk '{FS='\t'} $1==5 {print $0}'
5   2   3
$ cat awk.txt | awk '{FS='\t'} $1==33 {print $0}'
判断第一个字段是否为33时,不返回任何内容.这令人困惑.
通过说
awk '{FS='\t'} $1==5 {print}' file
您错误地定义了字段分隔符.要使它成为制表符,您需要说"\t"(带双引号).进一步阅读:awk没有捕获第一行/分隔符.
此外,您将每行设置它,因此它不会影响第一行.你想用:
awk 'BEGIN{FS='\t'} $1==5' file
是的,但为什么它在一个案例中有效但在另一个案例中却没有?
awk '{FS='\t'} $1==5' file  # it works
awk '{FS='\t'} $1==33' file # it does not work
你正在使用单引号'\t',这意味着你实际上将3个字符串连接在一起'{FS=',\t并'} $1==5'产生你的awk命令.shell解释\tas t,所以你的awk脚本实际上是:
awk '{FS=t} $1==5'
该变量t未设置,因此您将字段分隔符设置为空字符串"".这意味着该行被分割为与您拥有的字符一样多的字段.你可以看到它正在做awk 'BEGIN{FS='\t'} {print NF}' file,它将显示每条记录有多少个字段.
然后,$1仅仅是3和$2包含第二3.