问题1:
$ cat lab5.data
Mike Harrington510) 548-1278:250:100:175
Christian Dobbins408) 538-2358:155:90:201
Susan Dalsass206) 654-6279:250:60:50
Archie McNichol206) 548-1348:250:100:175
Jody Savage206) 548-1278:15:188:150
Guy Quigley916) 343-6410:250:100:175
Dan Savage406) 298-7744:450:300:275
Nancy McNeil206) 548-1278:250:80:75
John Goldenrod916) 348-4278:250:100:175
Chet Main510) 548-5258:50:95:135
Tom Savage:(408) 926-3456:250:168:200
Elizabeth Stachelin:(916) 440-1763:175:75:300
$ awk -f facts -F: lab5.data
Mike Harrington 250
Susan Dalsass 250
Archie McNichol 250
Jody Savage (206) 548-1278
Guy Quigley 250
Dan Savage (406) 298-7744
Nancy McNeil 250
John Goldenrod 250
50 95 135
Tom Savage (408) 926-3456
Tom Savage 250
Post by lastart;2019238
其实是因为你的文件里面有“\r"即回车号。
所以导致了你的输出乱掉,重新定义RS="\r\n"
$ awk -v RS="\r\n" -F: '/Savage/{print $1" "$2};/Chet/{print $1" "$3" "$4" "$5};{if( $3 == 250 ) print $1}' lab3.data
Mike Harrington
Susan Dalsass
Archie McNichol
Jody Savage (206) 548-1278
Guy Quigley
Dan Savage (406) 298-7744
Nancy McNeil
John Goldenrod
Chet Main 50 95 135
Tom Savage (408) 926-3456
Tom Savage
$ cat -A lab3.data
Mike Harrington510) 548-1278:250:100:175^M$
Christian Dobbins408) 538-2358:155:90:201^M$
Susan Dalsass206) 654-6279:250:60:50 ^M$
Archie McNichol206) 548-1348:250:100:175 ^M$
Jody Savage206) 548-1278:15:188:150 ^M$
Guy Quigley916) 343-6410:250:100:175 ^M$
Dan Savage406) 298-7744:450:300:275 ^M$
Nancy McNeil206) 548-1278:250:80:75 ^M$
John Goldenrod916) 348-4278:250:100:175 ^M$
Chet Main510) 548-5258:50:95:135 ^M$
Tom Savage:(408) 926-3456:250:168:200 ^M$
Elizabeth Stachelin:(916) 440-1763:175:75:300 ^M$
关于第二个问题这跟awk的处理方式有关,他是读一行处理一行。所以所有结果都叠在一起了。解决办法是最后再输出。
awk -F: '/Savage/{sav[$0]=$1" "$2};/Chet/{che[$0]=$1" "$3" "$4" "$5}; $3==250{s250[$0]=$1} END{print "Savage:";for(a in sav)print sav[a];print "Chet:"; for (a in che) print che[a];print "250:"; for (a in s250) print s250[a];}' lab3.data