UNIX bash - 如何比较同一列的值?

UNIX bash - 如何比较同一列的值?

我有一个文件,我想比较第 2 列中的每组 4 个值是否相等。

这是我的文件的一部分input.txt

1        493733  
2        493733  
3        493733  
4        493733  
1        546328  
2        546328  
3        546328  
4        546328

我需要一个脚本来比较前 4 行第 2 列的值:

1        493733  
2        493733  
3        493733  
4        493733  

然后跳到下 4 行(...直到文件末尾 - 长度可能会有所不同):

 1        546328  
 2        546328  
 3        546328  
 4        546328 

第 2 列上的数字应该每 4 行相同,但有时会出现不同的数字,我需要捕捉它。

如果数字匹配,则输出某种消息。如果任何数字不匹配,则输出到.log要检查的文件中。

答案1

这应该可以解决问题:

file="input.txt"
log_file="some.log"

num_lines=$(wc -l < "$file")
for i in `seq 0 $(bc<<<$num_lines/4)`; do
    FIRST_LINE=$(bc<<<"$i*4+1")
    SECOND_LINE=$(bc<<<"$i*4+2") 
    if [ "$(awk NR==$FIRST_LINE "$file")" == "$(awk NR==$SECOND_LINE "$file")" ];
    then
        echo "some kind of message"
    else
        echo "Lines $FIRST_LINE and $SECOND_LINE do not match" | tee -a "$log_file"
    fi
done

相关内容