微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 '%s\n' "${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中没有条目,则打印第一个字段。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。