1

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

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脚本本身中做到这一点。

4

2 回答 2

1

您可以使用 gnu awk 尝试类似的操作。

gawk '/pattern to search/ { print FILENAME; nextfile }' *.files
于 2013-06-11T12:56:17.513 回答
0

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

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
于 2013-06-11T13:42:58.507 回答