如何从行内指定的字符范围中grep然后打印整行

时间:2014-05-08 05:55:32

标签: awk grep cut

我有一个文件,每行有多行,包含3400个字符。我想从指定的字符范围中查找某些内容,让我们说要在行中的字符范围14到25之间grep "pavan"

为此,我可以简单地执行以下操作

cat filename | cut -c 14-25 | grep pavan 

我尝试使用awk命令,但它不起作用,因为这些行超过了3000个字符 但是完整的这一行不会打印出来。

我想打印完整的一行,以便我可以对它进行进一步的操作。

3 个答案:

答案 0 :(得分:1)

awk -v pattern="pavan" 'match( substr($0, 14, 11), pattern )' file

将打印匹配的行。

做同样事情的一种更复杂的方式:

awk -v patt="pavan" -v start=14 -v end=25 '
    match($0,patt) && start <= RSTART && RSTART <= end-RLENGTH
' file

- 由于Ed Morton的有效评论而受到打击。

答案 1 :(得分:0)

这不是很优雅,但确实有效!

从您拥有的内容开始,但删除不必要的cat

cut -c 14-25 file

现在让awk找到你想要的字符串并打印行号:

cut -c 14-25 file | awk '/paven/{print NR}'

现在您有一个所需的所有行号列表。您可以在while循环中处理它们,如下所示:

cut -c 14-25 file | awk '/pavan/{print NR}' | while read line; do
   echo $line
   sed -n "${line} p"
done

或将它们放入数组

lines=($(cut -c 14-25 file | awk '/pavan/{print NR}'))
echo ${lines[@]}

答案 2 :(得分:0)

一些算术,您可以使用grep

grep -E '^.{13}.{0,7}pavan' filename

这会匹配指定字符范围之间包含pavan的行。

它基本匹配一行开头的13个任意字符。然后查找可以在0到7个任意字符前面的pavan

相关问题