无法正确比较 bash 循环中定义的变量
Defined variable in bash loop cannot be compared correctly
首先创建2个文件:
cat <<'EOF'> test
f u u 1624268497
f3 u2 u2 1624268498
EOF
cat <<'EOF'> test_new
f u4 u5 16242684973
f4 u2 u2 1624268498
f3 u2 u2 1624268498
EOF
我想循环文件以列出 test_new
的唯一元素,脚本如下:
##!/bin/bash
added=()
while read F_NEW O_NEW G_NEW P_NEW; do
exist=0
while read F O G P; do
#exist in both old & new
if [[ $F_NEW == $F ]]; then
exist=1
break
fi
# echo "tester: $F"
done < test
if [ $exist == 0 ]; then
echo $F_NEW
added+=($F_NEW)
fi
done < test_new
printf '%s\n' "${added[*]}"
预期结果是:
f4
但我得到了:
f4 f3
问题出在哪里?
Awk 非常适合解决这样的问题:
awk 'NR==FNR { arr[]=1;next } arr[] != "1" { print }' test test_new
首先处理测试文件 (NR==FNR) 创建一个名为 arr 的数组,该数组由第一个 space 分隔字段键入。然后在处理 test_new 文件时,如果第一个字段在 arr 中没有条目,则打印第一个字段。
首先创建2个文件:
cat <<'EOF'> test
f u u 1624268497
f3 u2 u2 1624268498
EOF
cat <<'EOF'> test_new
f u4 u5 16242684973
f4 u2 u2 1624268498
f3 u2 u2 1624268498
EOF
我想循环文件以列出 test_new
的唯一元素,脚本如下:
##!/bin/bash
added=()
while read F_NEW O_NEW G_NEW P_NEW; do
exist=0
while read F O G P; do
#exist in both old & new
if [[ $F_NEW == $F ]]; then
exist=1
break
fi
# echo "tester: $F"
done < test
if [ $exist == 0 ]; then
echo $F_NEW
added+=($F_NEW)
fi
done < test_new
printf '%s\n' "${added[*]}"
预期结果是:
f4
但我得到了:
f4 f3
问题出在哪里?
Awk 非常适合解决这样的问题:
awk 'NR==FNR { arr[]=1;next } arr[] != "1" { print }' test test_new
首先处理测试文件 (NR==FNR) 创建一个名为 arr 的数组,该数组由第一个 space 分隔字段键入。然后在处理 test_new 文件时,如果第一个字段在 arr 中没有条目,则打印第一个字段。