gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:50:53 24 4
gpt4 key购买 nike

我正在编写一个脚本来打印与给定字符串匹配的单元格的列号和行号,然后将其输出到文本文件。各个 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

# Prompt for input: 1. enter file name or path that you want searched; 2. enter the literal or regex string
echo File name or path to find matches in:
read file
echo Literal or regex string to find:
read string

# Define variable and test if any matches are to be found; if not, notification is sent to terminal, but if matches exist, their row numbers (as summary rows) and individual column numbers will be output to a .txt file in the home directory. NB: you need to escape minus symbol with brackets, [-], so that it's not confused with an invalid grep option!
matchesFound=$(cat $file | grep -E -c "$string")
if [ $matchesFound -eq 0 ];
then
echo "No matches exist."
else
printf "Summary Row No: \n`awk -v awkvar="$string" '$0 ~ awkvar{print NR}' $file`" > results_for_$string.txt
printf "\nInstance Column No: \n`awk -v awkvar="$string" -F"," '{for(i=1;i<=NF;i++){if ($i ~ awkvar){print i}}}' $file`" >> results_for_$string.txt
fi

最佳答案

您不能在正则表达式检查模式中使用 awk 变量,请尝试以下操作。您可以使用 awkindex 函数来检查条件是否尝试不使用 /../ 方式。

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

此答案仅处理 OP 根据问题显示的 awk 代码,以修复它。

关于regex - 在 for 循环中将 shell 变量传递给 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66793217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com