按位置和最大长度提取值

时间:2016-08-24 00:14:01

标签: bash shell unix awk filtering

我必须从文件中提取模式(位置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 个答案:

答案 0 :(得分:0)

试试这个:

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

它会:

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

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

  • .* - 其余部分
  • \1 - 仅打印匹配的10个字符

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

答案 1 :(得分:0)

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

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

你也可以打印第二个字段:

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