Regex 在for循环中将shell变量传递给awk

Regex 在for循环中将shell变量传递给awk,regex,bash,for-loop,variables,awk,Regex,Bash,For Loop,Variables,Awk,我正在编写一个脚本来打印与给定字符串匹配的单元格的列数和行数,然后将其输出到文本文件。单独的awk命令在终端中运行良好,我已经解决了其他语法问题,但是输出的.txt仍然是空的。我想我在将shell变量传递给awk时遇到了问题 #!/bin/bash echo Literal or regex string to find: read string echo File path to find string match in: read filename echo "Matches

我正在编写一个脚本来打印与给定字符串匹配的单元格的列数和行数,然后将其输出到文本文件。单独的
awk
命令在终端中运行良好,我已经解决了其他语法问题,但是输出的.txt仍然是空的。我想我在将shell变量传递给
awk
时遇到了问题

#!/bin/bash

echo Literal or regex string to find:
read string
echo File path to find string match in:
read filename

echo "Matches for $string were found in the following cells:" > results.txt

for string in filename
do
    awk -v awkvar="$string" -F"," '{for(i=1;i<=NF;i++){if ($i ~ /awkvar/){print i}}}' $filename >> results.txt | echo -e "\n" >> results.txt
    awk -v awkvar="$string" '/awkvar/{print NR}' $filename >> results.txt | echo -e "\n" >> results.txt
done
#/bin/bash
要查找的回显文本或正则表达式字符串:
读取字符串
要在中查找字符串匹配项的回显文件路径:
读取文件名
echo“在以下单元格中找到$string的匹配项:”>results.txt
用于文件名中的字符串
做

awk-v awkvar=“$string”-F”,“{for(i=1;i您不能在regexp检查模式中使用
awk
变量,请尝试以下操作。您可以使用
awk
index
函数,并检查条件是否在不使用
/..//code>方式的情况下尝试

awk -v awkvar="$string" -F"," '{for(i=1;i<=NF;i++){if ($i ~ awkvar){print i}}}' $filename >> results.txt | echo -e "\n" >> results.txt
awk -v awkvar="$string" 'index($0,awkvar){print NR}' $filename >> results.txt | echo -e "\n" >> results.txt

awk-v awkvar=“$string”-F”,“{for(i=1;i您不能在regexp检查模式中使用
awk
变量,请尝试以下操作。您可以使用
awk
index
函数,并检查条件是否在不使用
/
方式的情况下尝试

awk -v awkvar="$string" -F"," '{for(i=1;i<=NF;i++){if ($i ~ awkvar){print i}}}' $filename >> results.txt | echo -e "\n" >> results.txt
awk -v awkvar="$string" 'index($0,awkvar){print NR}' $filename >> results.txt | echo -e "\n" >> results.txt

awk-v awkvar=“$string”-F”,“{for(i=1;它包含指针,但输出仍然是空的……@KayGee,正如我提到的,我不确定您的完整要求(因为您的问题仅限于awk搜索),您能否只运行
awk-v awkvar=“$string”-F”{for(i=1;iIt在单个文件上工作得很好!谢谢!我只需要找出为什么它在for循环中不起作用……不要将普通变量转换为数组;使用例如
read-a filenames
,直接将其作为数组读取,然后对“${filenames[@]}”中的字符串使用
@KayGee您在一个地方有
文件名
,在另一个地方有
文件名
。除此之外,循环看起来还可以,但是在传递给
echo
命令的字符串中嵌入
awk
命令看起来很奇怪。这可能还可以,但如果不知道它应该完成什么,我就不能说更多了。顺便说一句,我建议运行您的脚本。感谢指针,但输出仍然是空的…@KayGee,正如我提到的,我不确定您的完整要求(因为您的问题仅限于awk搜索),请您只运行
awk-v awkvar=“$string”-F”,“{for”(i=1;iIt在单个文件上工作得很好!谢谢!我只需要找出为什么它在for循环中不起作用……不要将普通变量转换为数组;使用例如
read-a filenames
,直接将其作为数组读取,然后对“${filenames[@]}”中的字符串使用
@KayGee您在一个地方有
文件名
,在另一个地方有
文件名
。除此之外,循环看起来还可以,但是在传递给
echo
命令的字符串中嵌入
awk
命令看起来很奇怪。这可能还可以,但如果不知道它应该完成什么,我就不能说更多了。顺便说一句,我建议您运行脚本。