bash循环中定义的变量无法正确比较



首先创建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 '%sn' "${added[*]}"

预期结果是:

f4

但我得到了:

f4 f3

问题出在哪里?

Awk是这样一个问题的好候选者:

awk 'NR==FNR { arr[$1]=1;next } arr[$1] != "1" { print $1 }' test test_new

首先处理测试文件(NR==FNR(创建一个名为arr的数组,该数组由第一个空格分隔的字段键控。然后,在处理test_new文件时,如果arr中没有第一个字段的条目,则打印第一个字段。

相关内容

  • 没有找到相关文章

最新更新