【问题标题】:extract value by position and maximum length按位置和最大长度提取值
【发布时间】:2016-12-30 22:54:09
【问题描述】:

我必须从文件中提取(位置 13,Maxlength=10)的模式:

文件 1:

fjlksflsf    content1   blabla
kjodeddek    content1   blabla
fdfkjlsdd    content1   blabla    
fsdffsdfs    content1   blabla
.            
.
.
dzedojioj    content1   blabla

我想使用脚本来提取值“content1”

文件 2

fjlsdfsf    content22   blabla
gfgttsdd    content22   blabla
gzdfldfd    content22   blabla    
azefsgtg    content22   blabla
.            
.
.
fsffsdfj    content22   blabla

这里的脚本应该循环文件并在位置 13 到位置 23 提取正确的值,然后将其打印在屏幕上,例如从第二个文件中提取的值是“content22”

【问题讨论】:

  • 列和长度参数从何而来?只指定第 2 列会更容易吗?
  • position 13maxlength 10 是非常模糊的术语。一行中的字符位置,文件中的行位置,一行中的字符串位置,一个单词的长度,一行的长度.....edit你的问题清楚地说明你的要求并摆脱所有@987654326 @s 将所有单词“内容”更改为实际的代表性内容,并提供示例输入/输出,我们可以测试潜在的解决方案。
  • 你试过什么?我建议将其添加到您的问题中,否则您的“问题”似乎更像是对“免费脚本编码”的请求。此外,无论如何,您都不需要“脚本”来执行此操作——它实际上是一个命令,如果您尝试搜索术语 cut,您可能会找到答案。
  • awk '{ print substr($0, 13, 10) }' 将是一个起点。如果您想修剪尾随空格,这应该不难弄清楚。

标签: bash shell unix awk filtering


【解决方案1】:

在 AWK 中。如果你真的想从第 13 位开始,长度为 10:

$ awk '{print substr($0,13,10)}' file1
 content1 
 content1 
 ...

您也可以只打印第二个字段:

$ awk '{print $2}' file1
content1 
content1 
...

【讨论】:

    【解决方案2】:

    试试这个:

    sed -e 's/.\{12\}\(.\{10\}\).*/\1/'
    

    它会:

    • .\{12\} - 查找前 12 个字符

    • \(.\{10\}\) - 将匹配接下来的 10 个字符

    • .* - 剩下的一行
    • \1 - 将只打印匹配的 10 个字符

    当然,您必须更改要忽略和匹配的字符数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      相关资源
      最近更新 更多