преобразование строк в одну
не могли бы вы помочь объединить строки 9X_awk во входном файле и вывести вывод, как показано 9X_nawk ниже, в порядке убывания.
входной файл.txt
TerminalA/admin#
51% used
TerminalB/admin#
62% used
TerminalC/admin#
42% used
outputfile 9X_gawk должен содержать, как показано ниже, по 9X_mawk одной строке для каждого терминала.
TerminalB/admin# 62% used
TerminalA/admin# 51% used
TerminalC/admin# 42% used
Ниже 9X_awk приведен код, который я пробовал:
awk -f process1.awk | sort -t: -k1,2rn > output.txt
где скрипт 9X_awk awk:
$ cat process1.awk
/^$/ { print " " }
!/^$/ { printf("%s ",$0) }
Ответ #1
Ответ на вопрос: преобразование строк в одну
С показанными образцами попробуйте выполнить 9X_gawk код awk
.
awk '{sub(/\r$/,"")} FNR%2==0{print val OFS $0 | "sort -nrk2";next} {val=$0}' Input_file
ИЛИ: Если вы хотите удалить лишние пробелы 9X_nawk перед строкой %
, которые, я думаю, должны 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_linux прочитать весь файл (slurp) вместо того, чтобы 9X_nawk читать его построчно. Это может не работать 9X_gawk с файлами, которые не помещаются в ОЗУ.
Затем 9X_awk-formatting мы используем регулярное выражение для преобразования 9X_mawk разрывов строк и пробелов в один пробел 9X_mawk и обратной сортировки по второму полю с 9X_awk-formatting помощью 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_gawk используя автономный 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_gawk
-
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