Функция сценария оболочки POSIX , использует расширение параметра для получения первого и второго числа, -eq
завершается успешно только в том случае, если есть два аргумента с одинаковыми номерами, (и терпит неудачу, если аргументов меньше или больше, или если какие-либо содержат буквы )и !=
, чтобы проверить наличие пробела. Возвращает true , только если это кортеж из двух чисел:
is_tup() { [ ${1% *} -eq ${1% *} -a \
${1#* } -eq ${1#* } -a "${1% *}" != "$1" ] 2> /dev/null ; }
Тест:
echo '12 123
23 3246543
123 345
34 23
1 234
123 123 123
1235124
123w123 123' |
while read x ; do is_tup "$x" && a=yes || a=no ; printf '%s\t%s\n' $a "$x" ; done
Выход:
yes 12 123
yes 23 3246543
yes 123 345
yes 34 23
yes 1 234
no 123 123 123
no 1235124
no 123w123 123
С любым awk в любой оболочке на каждом блоке UNIX для входного файла любого размера (, если только этот входной файл не представляет собой просто 1 большую строку текста, не содержащую пробелов, которые не могут поместиться в памяти):
$ printf '%s\n' a b c | awk -v ORS= '1; END{if (NR) print RS}'
abc