所以我有一个文件,其中有一些人的全名(名字和姓氏),位于以某种特定模式开头的各个单独的行上。在 grep 命令的帮助下,我成功地仅提取了全名并将其存储在变量中。现在我需要访问每个全名并检查它是否与另一个变量中的某些值匹配。我尝试使用 for 循环,但它将名字和姓氏视为单独的项目,因为它们之间有空格。我需要将名字和姓氏放在一起并与其他变量进行检查。
例如。运行 grep 命令后,我得到 3 个值并存储在变量名称中。
Abc xyz
Pqr def
Lmn ghi
运行 for 循环如下:
for n in $names; do
echo $n
if [ "$n" = "Abc Pqr" ]; then
echo "something"
fi
done
给出以下输出:
Abc
xyz
Pqr
def
Lmn
ghi
我想要$n
两者都拥有Abc xyz
(名字和姓)在一起,以便我可以检查情况。
答案1
我格式化了您的问题,包括您的伪代码,但是您尝试执行此操作的方式将不起作用。您的$names
变量不是数组,而是包含换行符的单个长字符串。这就是您将来可以迭代此类字符串的方式。
这是我们的示例names.txt
文件,我们将对其进行 grep 来模拟该过程
### names.txt ###
### our sample file to grep over as an example ###
##################################################
Abc xyz
Pqr def
Lmn ghi
代码如下:
names=$(grep -v '^#' names.txt)
i=1;
while read n; do
echo "Name $i. $n"
if [[ "$n" == "Pqr def" ]]; then
echo "--- $n was found at line $i"
fi
i=$(($i+1));
done <<< "$names"
你的输出将如下所示:
Name 1. Abc xyz
Name 2. Pqr def
--- Pqr def was found on line 2
Name 3. Lmn ghi