Соединение строк с помощью POSIX sed

Функция сценария оболочки 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
4
22.02.2020, 22:30
1 ответ

С любым awk в любой оболочке на каждом блоке UNIX для входного файла любого размера (, если только этот входной файл не представляет собой просто 1 большую строку текста, не содержащую пробелов, которые не могут поместиться в памяти):

$ printf '%s\n' a b c | awk -v ORS= '1; END{if (NR) print RS}'
abc
2
28.04.2021, 23:22

Теги

Похожие вопросы