Awk 在同一脚本中的多个文件中搜索变量

Awk 在同一脚本中的多个文件中搜索变量,awk,Awk,我有一个脚本,它读取文件的每一行并根据特定匹配输出 function tohyphen (o) { split (o,a,"to[-_]") split (a[2],b,"-") if (b[1] ~ / /) { k=""; p=""; } else { k=b[1]; p=b[2] } if (p ~ / /) { p="" } return k } print k, "is present in" , FILENAME 我需要做的是检查k

我有一个脚本,它读取文件的每一行并根据特定匹配输出

function tohyphen (o) {
    split (o,a,"to[-_]")
    split (a[2],b,"-")
    if (b[1] ~ / /) { k=""; p=""; }
    else { k=b[1]; p=b[2] }
    if (p ~ / /) { p="" }
    return k
}

print k, "is present in" , FILENAME

我需要做的是检查k的值是否存在于其他大约60个文件中,并打印该文件名,同时它必须忽略它最初读取的文件,我目前正在使用grep执行此操作,但是多次调用grep会导致cpu变高,有没有一种方法可以在awk脚本本身中实现这一点。

您可以在gnu awk中尝试类似的方法

gawk '/pattern to search/ { print FILENAME; nextfile }' *.files

你可以用gnu awk试试这样的东西

gawk '/pattern to search/ { print FILENAME; nextfile }' *.files

您可以使用以下单个
awk
脚本替换管道
grep“$k”*.cfg | grep“something1”| grep“something2”| cut-d-f2,3,4

awk -v k="$k" '$0~k&&/something1/&&/something2/{print $2,$3,$4}' *.cfg
您在问题中提到打印文件名,在本例中:

awk -v k="$k" '$0~k&&/something1/&&/something2/{print FILENAME;nextfile}' *.cfg

您可以使用以下单个
awk
脚本替换管道
grep“$k”*.cfg | grep“something1”| grep“something2”| cut-d-f2,3,4

awk -v k="$k" '$0~k&&/something1/&&/something2/{print $2,$3,$4}' *.cfg
您在问题中提到打印文件名,在本例中:

awk -v k="$k" '$0~k&&/something1/&&/something2/{print FILENAME;nextfile}' *.cfg

你能发布你的grep命令吗?如果只有60个文件,对CPU来说应该不是什么大事。grep“$k”*.cfg | grep“something 1”| grep“something 2”| cut-d-f2,3,4我认为问题是每个文件可能有10到20k行,因此为每行运行grep可能会推动cpu?请发布grep命令好吗?如果只有60个文件,对CPU来说应该不是什么大事。grep“$k”*.cfg | grep“something 1”| grep“something 2”| cut-d-f2,3,4我认为问题是每个文件可能有10到20k行,因此为这些行中的每一行运行grep可能会推动cpu?如何将此内联到现有脚本中?它单独运行很好,但比grep慢。如何将其内联到现有脚本中?它单独运行很好,但比grep慢。