免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: z_2123
打印 上一主题 下一主题

[文本处理] 新人求解while问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-07-24 00:08 |只看该作者
本帖最后由 z_2123 于 2014-07-24 00:09 编辑

回复 10# yestreenstars
嗯,这样就行了,可不可以分开讲解下啊。
先是awk 'NF<5';
然后那个后面部分不怎么懂

   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
12 [报告]
发表于 2014-07-24 00:16 |只看该作者
回复 11# z_2123

  • awk是一行一行处理文本的
  • NF的值等于每行的字段数
  • NF<5{...}表示对字段数小于5的行执行大括号里的命令
  • getline s的作用是读取下一行的内容并将其赋值给变量s
  • print $0,s的作用是打印当前行的内容和变量s的内容并以空格分隔

论坛徽章:
0
13 [报告]
发表于 2014-07-24 00:19 |只看该作者
回复 12# yestreenstars


    明白了,谢谢哈

论坛徽章:
0
14 [报告]
发表于 2014-07-24 09:52 |只看该作者

来个while的
  1. #! /bin/sh


  2. while read l;do
  3.    x=1
  4.    for i in $l;do
  5.       let x=$x+1
  6.    done
  7.   if [ $x -lt 5 ];then
  8.      echo $l
  9.   fi


  10. done < a
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
15 [报告]
发表于 2014-07-24 16:32 |只看该作者
用sed的话可以试一下这个:
  1. sed -r ':1;/(\S+\s+){4}/!{N;s/\n/ /;b1}'
复制代码

论坛徽章:
0
16 [报告]
发表于 2014-07-24 17:10 |只看该作者
回复 15# yestreenstars



这是原文本。就是修复他们,然后在整体打印出来。用刚刚的语句,出来是这样的。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
17 [报告]
发表于 2014-07-24 17:14 |只看该作者
目测你
m f q g
这一句后面有空格,你自己检查一下。

论坛徽章:
0
18 [报告]
发表于 2014-07-24 17:30 |只看该作者
回复 17# yestreenstars


    确实是多了个空格,能解释下么) 谢谢

论坛徽章:
1
处女座
日期:2014-06-01 17:09:46
19 [报告]
发表于 2014-07-24 17:36 |只看该作者
awk 'NF<5{print $0}' 1.txt
h i j
k l

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
20 [报告]
发表于 2014-07-24 17:39 |只看该作者
回复 18# z_2123

稍微改一下就好了:
  1. sed -r ':1;/(\S+\s+){4}\b/!{N;s/\n/ /;b1}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP