将变量值传递给第二次调用 awk

将变量值传递给第二次调用 awk

我想将变量传递varawk以下命令中的下一条语句

cat scr1|awk '{val=substr($0,10,10)} 1'|awk '/           /{print $0}'

此语句用于仅在文件中的位置 10 到 19 处查找由 10 个空格组成的字符串,并仅返回该行。如果有人有更好的方法请告诉我。

答案1

只需检查 substr() 返回的字符串是否由 10 个空格组成:

awk 'substr($0,10,10))=="          "' infile

答案2

要“仅在文件中的位置 10 到 19 处查找包含 10 个空格的字符串并仅返回该行”:

$ cat file
12345678901234567890123
123456789          0123
12345678901234567890123

$ awk '/^.{9} {10}/' file
123456789          0123

答案3

#!/usr/bin/python
import re
k=re.compile(r'.{9}\s{10}')
o=open('filename','r')
for h in o:
    if re.search(k,h):
        print h
~                  

输入

 cat filename
123456789           1223
praveen1234444

输出

python script.py 
123456789           1223

答案4

那是行不通的。管道中的所有命令都是同时启动的。因此,在第一个 awk 影响第二个 awk 之前,第二个 awk 已经执行。

怎么样:

awk 'substr ($0, 10, 10) ~ /^[[:blank:]]*$/' scr1

提取子字符串,并检查它是否与所有空白的模式匹配。让 awk 本身读取文件,而不是通过 cat 和管道。

相关内容