awk 'BEGIN{RS=":"}{FS=","}{print $1}'命令,为何执行结果第1行会全部打印出来?

echo 1,a:2,b:3,c | awk 'BEGIN{RS=":"}{FS=","}{print $1}'
为何执行结果第1行会全部打印出来?

{FS=","}要放到BEGIN字段里面。

awk ‘BEGIN{} {} END{}’

echo 1,a,A:2,b,B:3,c,C|awk 'BEGIN{RS=":" ; FS=","}{print $1}'

echo 1,a,A:2,b,B:3,c,C|awk -F ',' 'BEGIN{RS=":"}{print $1}'

image

  • 因为在执行到语句体中的FS=“,”时,第一行数据已经被按照原来的情况加载完毕了,所以这个设置对于第一行数据就没有正确的生效。
  • 可以使用楼上助教给出的解决方案,将设置写到BEGIN中,这样设置会在第一行数据加载之前生效,避免第一行数据读入时设置不正确的尴尬情况。
  • 也可以在语句体中增加$0=$0,使用新的设置刷新一下加载进来的第一行数据,这样就能拿到正确的数据
    image