преобразование строк в одну
не могли бы вы помочь объединить строки 9X_linux во входном файле и вывести вывод, как показано 9X_gawk ниже, в порядке убывания.
входной файл.txt
TerminalA/admin# 51% used TerminalB/admin# 62% used TerminalC/admin# 42% used
outputfile 9X_gawk должен содержать, как показано ниже, по 9X_awk одной строке для каждого терминала.
TerminalB/admin# 62% used TerminalA/admin# 51% used TerminalC/admin# 42% used
Ниже 9X_awk-formatting приведен код, который я пробовал:
awk -f process1.awk | sort -t: -k1,2rn > output.txt
где скрипт 9X_nawk awk:
$ cat process1.awk /^$/ { print " " } !/^$/ { printf("%s ",$0) }
Ответ #1
Ответ на вопрос: преобразование строк в одну
С показанными образцами попробуйте выполнить 9X_mawk код awk
.
awk '{sub(/\r$/,"")} FNR%2==0{print val OFS $0 | "sort -nrk2";next} {val=$0}' Input_file
ИЛИ: Если вы хотите удалить лишние пробелы 9X_awk перед строкой %
, которые, я думаю, должны 9X_gawk быть удалены в соответствии с показанными 9X_gawk примерами, попробуйте следующее:
awk ' {sub(/\r$/,"")} FNR%2==0{ sub(/^ +/,"") print val OFS $0 next } { val=$0 } ' Input_file | sort -nrk2
Объяснение:
- Проверка условия
FNR%2==0
, чтобы убедиться, что номер строки четный, затем выполните следующие действия. - Вывод значения переменной val, за которым следует
OFS
, за которым следует$0
(текущая строка). - использование
| "sort -nrk2"
для дальнейшего вывода в основном сортирует вывод в обратном/возрастающем порядке 2-го столбца. next
пропустит все дальнейшие утверждения отсюда.- Оператор
{val=$0}
сохранит значение текущей строки в переменной val. Этот оператор будет выполняться только в том случае, если это нечетный номер строки.
Ответ #2
Ответ на вопрос: преобразование строк в одну
как perl oneliner:
perl -0777 -pE 's/\n\s+/ /g' /tmp/xx2 | sort -rk2
Сначала мы говорим Perl 9X_awk прочитать весь файл (slurp) вместо того, чтобы 9X_awk читать его построчно. Это может не работать 9X_gawk с файлами, которые не помещаются в ОЗУ. Затем 9X_awk мы используем регулярное выражение для преобразования 9X_nawk разрывов строк и пробелов в один пробел 9X_mawk и обратной сортировки по второму полю с 9X_nawk помощью sort -rk2
Ответ #3
Ответ на вопрос: преобразование строк в одну
Использование простого awk с сортировкой
$ awk ' { a=$0;getline; print a, $0 } ' input.txt | sort -k2 -nr TerminalB/admin# 62% used TerminalA/admin# 51% used TerminalC/admin# 42% used $
Или 9X_nawk используя автономный awk
$ awk ' BEGIN { PROCINFO["sorted_in"]="@ind_num_desc" } { a=$0;getline; b[$0]=a "" $0 } END { for(i in b) print b[i] } ' input.txt TerminalB/admin# 62% used TerminalA/admin# 51% used TerminalC/admin# 42% used $
Ответ #4
Ответ на вопрос: преобразование строк в одну
#
9X_awk
-
10
-
7
-
10
-
18
-
24
-
18
-
5
-
3
-
1
-
4
-
3
-
1
-
2
-
4
-
7
-
5
-
3
-
3
-
3
-
3
-
5
-
4
-
5
-
3
-
6
-
3
-
4
-
6
-
3
-
5
-
7
-
4
-
3
-
4
-
1
-
9
-
4
-
2
-
2
-
4
-
4
-
5
-
3
-
3
-
3
-
1
-
6
-
5
-
6
-
3