Chinaunix

标题: 请大神进来看看错在哪里了? [打印本页]

作者: bmne    时间: 2016-07-23 07:08
标题: 请大神进来看看错在哪里了?


awk '/^[^\s+]+\s+[^\s+]+$/'


这些正确(能提取):
  1. 003163.om        6651
  2. 232098m        6892
  3. 42986co        43136
  4. jgo.m 40931
  5. 90499.o gji789
  6. 678.q.o aoe12.
  7. 022149q.c 16203
  8. 1624@1m 122
  9. i_4_u_25@.c,s05
  10. mi_9@3.o,saci
  11. lo14@6.o,.hae
  12.         ju@1.m        j4jun
  13.         ty626.om        ao09
  14.         kmk_08@6.om        kik0
  15. iag@13.m     8105
复制代码
我的问题:
为什么下面这些就不正确呢?(代码对它没用,提取不出来)
  1.         xin_ling_shi_zhe        156
  2. christinaniuwenting     4826
  3. wsbbh     1278
  4. ghbfg     sckw
复制代码



请大神指导。谢谢!



作者: Herowinter    时间: 2016-07-23 07:45
本帖最后由 Herowinter 于 2016-07-23 11:23 编辑

回复 1# bmne

黑哥:在[]内[\s]相当于 [ s ]
改成这样

  1. awk '/^[^[:space:]]+[[:space:]]+[^[:space:]]+$/' urfile
复制代码
可以把不是空白字符开始的列数为2个行取出来;

如果要取出“    xin_ling_shi_zhe        156”这种空白字符开始的行,要这样

  1. awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/' urfile
复制代码

作者: bmne    时间: 2016-07-23 07:54
回复 2# Herowinter


谢谢大神

本来想直接找你,又怕你忙,所以不好意思张口

就直接发出求助帖子了。搜索、学习很长时间,没找到原因





   
作者: bmne    时间: 2016-07-23 07:58
回复 2# Herowinter


大神,版本老吗?


awk --version
GNU awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)






   
作者: bmne    时间: 2016-07-23 08:10
回复 2# Herowinter

大神

还是版本的问题?取反怎表示?

不行的这样   awk '!/^[^[:space:]]+\s+[^[:space:]]+$/'





   
作者: Herowinter    时间: 2016-07-23 08:24
本帖最后由 Herowinter 于 2016-07-23 08:26 编辑

回复 5# bmne

这样可以吗?

  1. awk '!/^[^[:space:]]+[[:space:]]+[^[:space:]]+$/' urfile
复制代码

作者: bmne    时间: 2016-07-23 08:31
本帖最后由 bmne 于 2016-07-23 08:32 编辑

回复 6# Herowinter


可以运行,但,行首有空格的也提取出来了(应该是不提取出来才正确)

是我的版本的问题?  这样取反才对       awk '/^[^[:space:]]+[[:space:]]+[^[:space:]]+$/'



   
作者: bmne    时间: 2016-07-23 10:17
回复 2# Herowinter


请问这个管道怎么用?

awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/'|awk '/^[^,]+,[^,]+$/'    这样不行





   
作者: Herowinter    时间: 2016-07-23 10:30
回复 8# bmne
  1. awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/ && /^[^,]+,[^,]+$/'
复制代码

作者: bmne    时间: 2016-07-23 10:34
回复 9# Herowinter

谢谢。这个有难度,不会


   
作者: blackold    时间: 2016-07-23 10:40
不是版本问题。

在[]内[\s]相当于 [s]
作者: bmne    时间: 2016-07-23 10:43
回复 9# Herowinter


大神,这样不行

单独能出结果。管道不行。不知道哪里出问题了



   
作者: bmne    时间: 2016-07-23 10:44
本帖最后由 bmne 于 2016-07-23 10:53 编辑

回复 11# blackold


大神休息来了。感谢


试了下。但,不会表达   awk '/^[^\\s+]+\\s+[^\\s+]+$/'
   
作者: blackold    时间: 2016-07-23 10:55
回复 13# bmne


    你想干吗?
作者: bmne    时间: 2016-07-23 10:58
回复 14# blackold


这个不能用啊。请修改一下  awk '/^[^\s+]+\s+[^\s+]+$/'


不会我


   
作者: blackold    时间: 2016-07-23 11:01
回复 15# bmne


    我说你有什么需求?
作者: bmne    时间: 2016-07-23 11:05
回复 16# blackold

一楼,两个源文档,全提取出来。别有遗漏

awk '/^[^\s+]+\s+[^\s+]+$/'   有问题。请给修改一下


辛苦


   
作者: Herowinter    时间: 2016-07-23 11:07
回复 11# blackold

对,是我搞错了,我自己虚拟机上awk版本低遇到过\s不支持,
想当然了,多谢黑哥指出。
   
作者: Herowinter    时间: 2016-07-23 11:08
回复 17# bmne

不知道你想干嘛,我猜的呀。
你贴一下原文件和要求的结果,要不别人不知道你要干什么。
作者: bmne    时间: 2016-07-23 11:15
回复 19# Herowinter


谢谢大神回复

我认为大神看一眼就明白了。所以简化了,不好意思


我的意思:把这两个代码一次性全自动运行。我用管道连了一下,不正确。再深入我就不会了

awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/'
awk '/^[^,]+,[^,]+$/'


你大神给的这个:awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/ && /^[^,]+,[^,]+$/'    我运行后,提取不出。我不知道什么原因,特来请教




   
作者: blackold    时间: 2016-07-23 11:18
回复 17# bmne


    哪里有两个源文档?

如果不好用文字描述,就上源文本和你想得到的结果。

作者: Herowinter    时间: 2016-07-23 11:19
回复 20# bmne

你要提取出来的行是这两个条件都满足还是满足1个就行了?
   
作者: bmne    时间: 2016-07-23 11:20


关于这个awk '/^[^\s+]+\s+[^\s+]+$/'有问题,如果能解决更好,我偷学知识。解决不了的话,有这个足以awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/'


这就是我的意思。谢谢了大神




作者: bmne    时间: 2016-07-23 11:23
本帖最后由 bmne 于 2016-07-23 11:24 编辑

回复 22# Herowinter



主要是想全自动一次运行,单独手动分两次运行费劲

满足一个条件即可。不好意思


(跟你偷学。奇怪,管道运行两个怎不行呢?)



   
作者: Herowinter    时间: 2016-07-23 11:24
回复 24# bmne

  1. awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/ || /^[^,]+,[^,]+$/'
复制代码

作者: bmne    时间: 2016-07-23 11:27


谢谢了。又学了一招

什么条件下,双||     ?





回复 25# Herowinter


   
作者: Herowinter    时间: 2016-07-23 11:28
回复 26# bmne

&& 逻辑与  两个条件都要满足
||   逻辑或  两个条件满足一个即可
   
作者: bmne    时间: 2016-07-23 11:31
本帖最后由 bmne 于 2016-07-23 11:32 编辑

回复 21# blackold


003163.om        6651
232098m        6892
42986co        43136
jgo.m 40931
90499.o gji789
678.q.o aoe12.
022149q.c 16203
1624@1m 122
i_4_u_25@.c,s05
mi_9@3.o,saci
lo14@6.o,.hae
        ju@1.m        j4jun
        ty626.om        ao09
        kmk_08@6.om        kik0
iag@13.m     8105
        xin_ling_shi_zhe        156
christinaniuwenting     4826
wsbbh     1278
ghbfg     sckw


大神,上面的我用awk '/^[^\s+]+\s+[^\s+]+$/'  提取不全面,有遗漏(可参看一楼)
请给修改下这个代码
辛苦了





   
作者: bmne    时间: 2016-07-23 11:38
回复 27# Herowinter


真热心啊大神,崇拜

偷学一招


   
作者: blackold    时间: 2016-07-23 11:49
回复 28# bmne
  1. awk '/^[^\s+]+\s+[^\s+]+$/' urfile
复制代码
会匹配到
   
lo14@6.o,.hae


你确定吗?
作者: bmne    时间: 2016-07-23 11:57
本帖最后由 bmne 于 2016-07-23 12:06 编辑

回复 30# blackold


我假设了极端情况

实际就是一个  ,   后面跟着是字符   .hae   


确定的  谢谢

   
作者: bmne    时间: 2016-07-23 12:03
回复 25# Herowinter



大神,今天跟你学最后一招(学多了,怕你烦,不教了)


请问这个提取非(反向),怎么表示?  

awk '/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/ || /^[^,]+,[^,]+$/'


另外,3个以上管道,取非    用  !  怎样表示?


   
作者: Herowinter    时间: 2016-07-23 12:17
本帖最后由 Herowinter 于 2016-07-23 12:17 编辑

回复 32# bmne

  1. awk '!/^[[:space:]]*[^[:space:]]+[[:space:]]+[^[:space:]]+$/ && !/^[^,]+,[^,]+$/'
复制代码

作者: bmne    时间: 2016-07-23 12:36
回复 33# Herowinter


谢谢。这一招很管用

今天就麻烦你到此了

感谢感谢

   
作者: blackold    时间: 2016-07-23 12:52
回复 33# Herowinter


    大部分情况下都可以用 \s 或 \S 代替。
作者: bmne    时间: 2016-07-23 15:56
本帖最后由 bmne 于 2016-07-23 15:57 编辑

回复 33# Herowinter




大神,我今天食言了

遇到了极端情况


一、中间及末尾两个地方有逗号
二、开头、中间、末尾三个地方有空格及中间、末尾两个地方有空格


请求帮助。给出两个代码,分别提取


......k1@1.m,llol,
121@12.m,123,
1256@6.cm,16,
53@1.m,mel,
82@6.m,uña,
90esr@6.om,92ter,
a-l-n-p@1.o,llmc,
a.a.0@1.om,Nan02,
a.bos2@6.m,Dps93,
a.c_uin@1.cm,fe47,
a.gl_776.m,rn,
a.mclch@16.cm,sper,
a.mhe@2.m,an02,
a.mowa@2.cm,sveh8,
a.mtou6.cm,199,
a.pe4@6.o,joie,
a.r.guy@m,msy,
a.r.mn@6.c,sn61,
a.sala@1.m,sn7,
VAAULm SCE
  clo1@3.c EE1
  es10@6.cm soth
  vt6@6.c 1ead
  wig@1m ken
crg1@3.m Cv94
na0@6.c        890       
onn@m        ynn                                                                                                                                                       
nan_20@1.o        39       
nan7@26.m        962       
onan2om        121                                                                                                                                                       
ngnn@1m        d12                                                                                                                                                       
ngnm        111       
ngmg3@om        93       
ono@1.        171       
g1@2.c        383                               
dr_an@.m        ara67       
r120@6.o        129                                                                                                                                                       
1815@cm        758                                                                                                                                                       
r93@16.m        a560       
D0@1om        191       
dr36.        324                                                                                                                                                       
dr.c        921       
dr92om        89       
drm        s346       






   
作者: Herowinter    时间: 2016-07-23 17:01
回复 36# bmne

  1. sed -nr '/^([^,]+,){2}$||^\s*(\S+\s+){2}$/p'
复制代码

作者: bmne    时间: 2016-07-23 17:12
回复 37# Herowinter


谢大神

马上试试去。添麻烦了


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2