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

Awk 如何从行中指定的字符范围内进行grep,然后打印整行,awk,grep,cut,Awk,Grep,Cut,我有一个文件,其中有多行,每行包含3400个字符。我想从指定的字符范围对某些内容进行grep,比如说我想在行中的字符范围14到25之间对“pavan”进行grep 要做到这一点,我可以像下面这样做 cat filename | cut -c 14-25 | grep pavan 我尝试使用awk命令,但它不起作用,因为行的长度超过了3000个字符 但按此完整行将不会打印 我想打印完整的行,以便我可以对其执行进一步的操作 这不是很优雅,但确实有效 从您拥有的开始,但删除不必要的cat: cut

我有一个文件,其中有多行,每行包含3400个字符。我想从指定的字符范围对某些内容进行grep,比如说我想在行中的字符范围14到25之间对“pavan”进行grep

要做到这一点,我可以像下面这样做

cat filename | cut -c 14-25 | grep pavan 
我尝试使用awk命令,但它不起作用,因为行的长度超过了3000个字符 但按此完整行将不会打印


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

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

从您拥有的开始,但删除不必要的
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[@]}
一些算术运算,您可以使用
grep

grep -E '^.{13}.{0,7}pavan' filename
这将匹配指定字符范围之间包含
pavan
的行

它基本上匹配行首的13个任意字符。然后查找前面可以有0到7个任意字符的
pavan

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
awk-v patt=“pavan”-v start=14-v end=25'

特别是第一个版本的匹配($0,patt)&&start+1。对于第二个,我发现
start哦,我刚刚意识到你不应该做第二个版本,因为如果你正在搜索的模式存在于,比如,行的前11个字符和14-25个字符中,那么匹配()将在前11中找到它,并相应地设置RSTART/RLENGTH,因此即使所需线段中存在图案,也不会打印您的线条。