Awk 如何从行中指定的字符范围内进行grep,然后打印整行
我有一个文件,其中有多行,每行包含3400个字符。我想从指定的字符范围对某些内容进行grep,比如说我想在行中的字符范围14到25之间对“pavan”进行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
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,因此即使所需线段中存在图案,也不会打印您的线条。