【发布时间】:2020-10-18 03:08:13
【问题描述】:
我有一个username.txt,其中显示了用户名和组,用“,”分隔。我正在尝试仅将“访问者”组中的用户名复制到新的 txt。
我的用户名.txt:
mark,staff
jason,visitor
jack,visitor
orlando,visitor
这是我当前的 bash 脚本:
#!/bin/bash
username=username.txt
while IFS=, read username1 group1; do
if [ $group1 = "visitor" ]; then
echo $username1 > reportvisitors.txt
fi
done < $username
我的报告访问者.txt
预期输出:
jason
jack
orlando
实际输出:
jack
【问题讨论】:
-
查看上一个问题的答案。
-
实际上,我的输出显示了 orlando,这是有道理的,因为它是您输入文件中的最后一个条目。
-
有什么理由不使用 awk:
awk -F, '$2=="visitor"{print $1 > "reportvisitors.txt"}' "$username"? -
如果您想每次运行覆盖一次,请将
> reportvisitors.txt放在done之后。这样你仍然会截断文件,但你会在每个循环中截断一次,而不是每个echo一次。 -
顺便说一句,这里有很多错误(在撰写本文时,在所有建议的答案中)与错误引用有关——尝试测试当访问者的用户名为 @ 时会发生什么987654330@。通过shellcheck.net 运行代码总是一个好主意。