Извиняюсь за отрицание и отрицательный комментарий, но я всегда с подозрением отношусь к вопросам типа домашней работы Чтобы исправить это, я сделал это для вас. Вам не нужен awk, все это можно сделать в bash.
Просто установите F1 и F2 на правильные имена файлов. Я оставлю это в качестве упражнения для вас, чтобы принять их в качестве аргументов командной строки:)
#!/usr/bin/env bash
F1=f1.tgz
F2=f2.tgz
VERSION_FILE=version.txt
version1=`tar -xzf $F1 -O $VERSION_FILE|sed -e 's/.*version=//'`
version2=`tar -xzf $F2 -O $VERSION_FILE|sed -e 's/.*version=//'`
if [ "$version1" == "$version2" ]; then
echo "$F1 and $F2 contain the same version: $version1, $version2"
exit 0;
fi
( # start a subshell because we're changing IFS
# Assume F1 is the latest file unless we find otherwise below
latest_file=$F1
latest_version=$version1
# set the Internal Field Separator to a dot so we can
# split the version strings into arrays
IFS=.
# make arrays of the version strings
v1parts=( $version1 )
v2parts=( $version2 )
# loop over $v1parts, comparing to $v2parts
# NOTE: this assumes the version strings have the same
# number of components. If wont work for 1.1 and 1.1.1,
# You'd have to have 1.1.0 and 1.1.1
# You could always add extra '0' components to the shorter array, but
# life's too short...
for ((i = 0 ; i < ${#v1parts[@]} ; i++ )); do
# NOTE: ${#v1parts[@]} is the length of the v1parts array
if [ "${v1parts[i]}" -lt "${v2parts[i]}" ]; then
latest_file=$F2
latest_version=$version2
break;
fi
done
echo "$latest_file is newer, version $latest_version"
)