Ваша подстановка команд излишне сложна.
Вместо:
cells=$( awk '/rx cells/ { print $NF }' <"$co_result" )
printf 'Var_value: %s\n' "$cells"
$NF
будет последним полем, разделенным пробелом -в строке, и оно печатается, если строка содержит строку rx cells
.
Также убедитесь, что входной файл является текстовым файлом Unix, а не текстовым файлом DOS. Запустите dos2unix
для файла, чтобы преобразовать его в текстовый файл Unix.
Глядя на вашу команду:
grep -e 'cells' $co_result | cut -d: -f2 | awk '{print $1}'| awk 'NR%2{printf $0"";next;}1'
Первый:grep -e 'cells' $co_result
завершится ошибкой, если $co_result
содержит пробел, табуляцию, новую строку или любой другой специальный символ (, поскольку он не заключен в кавычки ).
Вывод команды
tx cells : 468
rx cells : 1707
Тогда:cut -d: -f2
. Это выводит
468
1707
Тогда:awk '{print $1}'
. Это выводит то же самое, что и выше, но с удаленными начальными пробелами
Тогда:awk 'NR%2{printf $0"";next;}1'
.Это запутанный способ сделать paste -d' ' - -
и вывести
468 1707
Позже echo
выведет
Var_value: 468 1707
Причина, по которой вы этого не видите, заключается в том, что ваш входной файл является текстовым файлом DOS и содержит символы возврата каретки в конце каждой строки. Поэтому курсор возвращается к началу строки после печати 468
.
Используйте dos2unix
во входном файле.
Откуда вы взяли 530
, я не знаю.
С помощью zsh
вы можете определить функцию групповой сортировки, например:
digitsOnly() REPLY=${REPLY//[^0-9]} # removes all non-digits
, а затем используйте его как:
print -rC1 -- *(no+digitsOnly)
Здесь квалификатор n
glob превращает параметр numericglobsort
для этого одного расширения glob, и o+function
сортирует на основе вывода (через$REPLY
)из function
.
print -rC1
печатает свои аргументы r
aw в колонке 1
c
.
Помните, что если вы используете ls
, ls
по умолчанию сортирует список файлов перед печатью (в алфавитном порядке ). В реализации GNU ls
этой сортировки можно избежать с помощью опции -U
:
ls -ldU -- *(no+digitsOnly)
Вы можете сделать что-то подобное с perl
с:
perl -le 'sub digitsOnly {$_=shift; s/\D//gr};
print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>'
Или запустить команду для этого списка файлов:
perl -l0e 'sub digitsOnly {$_=shift; s/\D//gr};
print for sort {digitsOnly($a) <=> digitsOnly($b)} <*>' |
xargs -r0 ls -ldU --