如何将它视为一个整体的字符串列表分开

如何将它视为一个整体的字符串列表分开

我有 2 个生成并放入变量的字符串列表,$t以及$nnpp.然后使用comm命令来比较它们。

pcr=$(comm -13 <(echo “$t” | sort) <(echo “$nnpp” | sort))

然后将差异添加回主文件中并对其进行排序。

psl=$(sort <(echo $t) <(echo $pcr) | uniq)

现在,当我尝试循环遍历我制作的新列表时$psl,它被视为一件事,并在第一次迭代时获取所有内容。我怎样才能把它分开以便我可以循环它?

我已经尝试过这个但没有成功。

for e in “${psl[@]}”
then
     echo $e
done

如果您想知道的话,我在脚本的开头也有这个。

IFS=$’\n’
IFS=$’\t’

答案1

您遇到的部分问题是该行中缺少引号,这使得$t和的内容$pcr成为一行,这使得psl只有两行长行,其中包含许多单词。

psl=$(sort <(echo $t) <(echo $pcr) | uniq)

一个简单的第一个修复是:

psl=$(sort <(echo "$t") <(echo "$pcr") | uniq)

但随后您将需要$psl逐行迭代(我假设您正在逐行处理它,因为您使用的是sort,uniq和等工具comm。)

while read -r e ; do
    echo "$e"
done <<<"$psl"

如果您使用临时文件,这实际上会变得容易得多:

echo "$t" | sort >t.sorted
echo "$nnpp" | sort >nnpp.sorted
comm -13 t.sorted nnpp.sorted >pcr
sort t.sorted pcr | uniq >psl
while read -r e ; do
    echo "$e"
done <psl

顺便说一句,因为pcr简单地具有唯一的行nnpp,并且您正在使用uniq它应该消除 和 之间的重复项tnnpp也许您可​​以使用更简单的方法:

echo "$t" >t
echo "$nnpp" >nnpp
sort -u -o psl t nnpp

请注意,sort-u标志与通过管道传输相同uniq,并且您可以传递sort一个-o标志来命名要在其中写入排序输出的文件。

相关内容