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