我有一个文件,每行有多行,包含3400个字符。我想从指定的字符范围中查找某些内容,让我们说要在行中的字符范围14到25之间grep "pavan"
。
为此,我可以简单地执行以下操作
cat filename | cut -c 14-25 | grep pavan
我尝试使用awk命令,但它不起作用,因为这些行超过了3000个字符 但是完整的这一行不会打印出来。
我想打印完整的一行,以便我可以对它进行进一步的操作。
答案 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
。