文件test如下
1111111
2222222
3333333#
4444444
5555555
执行命令 awk 'BEGIN{RS="#";ORS="\n";FS=" "}{print $1}' test.txt
1111111
5555555执行命令awk 'BEGIN{RS="#";ORS="\n";FS="\n"}{print $1}' test.txt
1111111
空行

解决方案 »

  1.   

    FS表示纪录字段分割符,当FS=空格时,默认去掉头尾的空格匹配,所以第二行匹配到了4444444。(注:楼主为何匹配到555555,不解??)
    详见https://www.gnu.org/software/gawk/manual/html_node/Field-Splitting-Summary.html#Field-Splitting-Summary
    当FS=回车时,每个回车算一个分割,所以第一个被分割的字符是空的,结果中就显示了空行。换一种printf方式就可以看出两者区别。如下:
    xxx@ubuntu:~/tmp$ awk 'BEGIN{RS="#";ORS="\n";FS=" "}{printf "-%s-%s-%s-\n", $1, $2, $3}' test.txt  
    -1111111-2222222-3333333-
    -4444444-5555555--xxx@ubuntu:~/tmp$ awk 'BEGIN{RS="#";ORS="\n";FS="\n"}{printf "-%s-%s-%s-\n", $1, $2, $3}' test.txt 
    -1111111-2222222-3333333-
    --4444444-5555555-