【问题标题】:Capturing string ignoring escape sequence捕获字符串忽略转义序列
【发布时间】:2011-07-11 13:13:39
【问题描述】:

我的输入文件有以下条目:

0100000000010001000   1       GWSL7YE02GHT73, 
0010000000000000000   1       GWSL7YE02GU6GK, 
0000000000000000000   1       GWSL7YE02G5W2B, 
0010000000110000000   1       GWSL7YE02I364F, 
0000000000000000000   1       GWSL7YE02F4IOC, Escherichia_coli_O127:H6

如何只捕获末尾有字符串的行,例如第 5 行。 另一件需要注意的是,在每一行中都有两个转义序列“\t”“\n”。 所以在第 1-5 行中不要认为在 "," 之后有转义字符 "\n",但实际上它是 "\t""\n"。 我确实有以下 awk 代码:awk '{if ($0~/[A-Z0-9_]$/) print$NF}',但是,这假设有字母,最后有取消标记的数量。实际上,名称可以以任何特殊字符结尾。我已经测试过,因此我必须加上下划线“_”。那么除了这个还有其他方法吗。可以给我awk '{if ($NF!~/an expression that maps ,\n\t/}'

谢谢

【问题讨论】:

  • 您想准确捕捉什么,只是Escherichia_coli_O127:H6?对了,没有第6行,只呈现了5行
  • 不,有很多字符串,显示的是包含更多字符串/科学名称/分类的文件的一部分。我已将 6 更正为 5,不确定它没有保存什么
  • @Sudeep:我只是在询问给出的示例,我知道这是概括的。但是,就您刚刚提供的示例输入的输出而言,您在寻找什么?
  • @Sudeep:另外,\t 之间的逗号, 和E 中的E 之间是空格还是制表符Escherichia?
  • @SiegeX 在 "," 和 "E" 之间有 "\t"

标签: string escaping awk sequences


【解决方案1】:

只需查找字段大于 3 的行

awk 'NF>3' ./infile

概念证明

$ cat -A lastfield
0100000000010001000   1       GWSL7YE02GHT73,^I$
0010000000000000000   1       GWSL7YE02GU6GK,^I$
0000000000000000000   1       GWSL7YE02G5W2B,^I$
0010000000110000000   1       GWSL7YE02I364F,^I$
0000000000000000000   1       GWSL7YE02F4IOC,^IEscherichia_coli_O127:H6^I$

$ awk 'NF>3' lastfield
0000000000000000000   1       GWSL7YE02F4IOC,   Escherichia_coli_O127:H6

【讨论】:

  • +1。 @Siegex,不要挂断实际的空白字符。默认情况下,awk 在“空白”上拆分字段,不管它是空格还是制表符。此外,awk 会忽略前导和尾随空格,除非您指定字段分隔符。
  • @glenn 我被挂在这个空间上不是因为我认为 awk 关心,而是因为我首先考虑使用sed -n '/, */p' 作为解决方案。然后我才意识到我查看字段数量的 awk 解决方案
  • 抱歉,我的评论是针对@Sudeep。
  • @glenn 啊哈。以为你在评论我在 OP 中制作的 cmets =)。 P.S.,没什么好道歉的,我们都是朋友=)
【解决方案2】:

你也可以试试

awk -F, 'NF>1' file

【讨论】:

  • 这行不通,如果你用,分隔,它们都会有两个字段。尝试awk -F, '{print NF}' file 确认。
  • @SiegeX,是的,我错过了。那么使用默认FS会更好。
猜你喜欢
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 2013-04-18
  • 2011-06-08
相关资源
最近更新 更多