您好,我想问一下如何从变量中获取唯一的字符串。
while read -r line
do
route=$(echo $line | awk -F'[:]' '{print $2}') #get path from log file
if [ "`dirname "$route"`" == "`xrealpath "$PWD"`" ]; then #compare path from log file with $PWD
name=$(echo $line | awk -F'[:]' '{print $1}') #take name from 1st column in log file
fi
if ! [ "$name" == "$help_name" ]; then
echo $name
help_name=$name
pom=$pom:$name
fi
done < $WEDI_RC
样本日志文件:
proj.sh:/Users/Tom/Documents/proj.sh:2015-03-21:1
proj1.sh:/Users/Tom/Documents/proj.sh:2015-03-21:1
proj.sh:/Users/Tom/Documents/proj.sh:2015-03-21:2
proj1.sh:/Users/Tom/Documents/proj.sh:2015-03-21:2
proj.sh:/Users/Tom/Documents/proj.sh:2015-03-21:3
proj1.sh:/Users/Tom/Documents/proj.sh:2015-03-21:3
我如何只回声每个唯一的一次?
我的输出现在看起来像这样:
proj.sh
proj1.sh
proj.sh
proj1.sh
proj.sh
:proj.sh:proj1.sh:proj.sh:proj1.sh:proj.
预期输出:
proj.sh
proj1.sh
我不知道一个周期可以读取多少文件。我们无法使用任何临时文件,谢谢
这使用关联数组seen
来跟踪已看到的名称:
declare -A seen
while read -r line
... blabla ...
do
if [ -z "${seen[$name]}" ]; then
echo $name
seen["$name"]=1
pom=$pom:$name
fi
done < "$WEDI_RC"
blabla
)让我们从这个文件开始:
$ cat file
proj.sh
proj1.sh
proj.sh
proj1.sh
proj.sh
我们将运行以下代码(请注意,该代码...blabla...
已被删除,并且循环现在name
直接读入):
$ cat script.sh
declare -A seen
while read -r name
do
if [ -z "${seen[$name]}" ]; then
echo $name
seen["$name"]=1
pom=$pom:$name
fi
done < file
declare -p pom
结果如下:
$ bash script.sh
proj.sh
proj1.sh
declare -- pom=":proj.sh:proj1.sh"
在修改后的问题中,将显示以下代码:
route=$(echo $line | awk -F'[:]' '{print $2}') #get path from log file
if [ "`dirname "$route"`" == "`xrealpath "$PWD"`" ]; then #compare path from log file with $PWD
name=$(echo $line | awk -F'[:]' '{print $1}') #take name from 1st column in log file
这意味着,在运行代码时,name
可能永远不会在运行脚本时根据当前目录进行设置。这将解释注释中报告的错误消息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句