您能否帮助合并输入文件中的行并按降序生成如下输出。
输入文件.txt
TerminalA/admin#
51% used
TerminalB/admin#
62% used
TerminalC/admin#
42% used
Run Code Online (Sandbox Code Playgroud)
每个终端的输出文件应包含如下一行。
TerminalB/admin# 62% used
TerminalA/admin# 51% used
TerminalC/admin# 42% used
Run Code Online (Sandbox Code Playgroud)
下面是我尝试过的代码:
awk -f process1.awk | sort -t: -k1,2rn > output.txt
Run Code Online (Sandbox Code Playgroud)
其中 awk 脚本是:
$ cat process1.awk
/^$/ { print " " }
!/^$/ { printf("%s ",$0) }
Run Code Online (Sandbox Code Playgroud)
使用您显示的示例,请尝试以下awk代码。
awk '{sub(/\r$/,"")} FNR%2==0{print val OFS $0 | "sort -nrk2";next} {val=$0}' Input_file
Run Code Online (Sandbox Code Playgroud)
或者:如果您想删除%行前的额外空格,我认为应该按照所示示例删除,然后尝试以下操作:
awk '
{sub(/\r$/,"")}
FNR%2==0{
sub(/^ +/,"")
print val OFS $0
next
}
{
val=$0
}
' Input_file | sort -nrk2
Run Code Online (Sandbox Code Playgroud)
解释:
FNR%2==0以查看行号是否为偶数,然后执行以下操作。OFS($0当前行)。 | "sort -nrk2"进一步基本上是按第二列的反向/递增顺序对输出进行排序。next将跳过此处的所有进一步语句。{val=$0}会将当前行的值存储到变量 val 中。该语句仅在奇数行号时执行。小智 6
作为 perl oneliner:
perl -0777 -pE 's/\n\s+/ /g' /tmp/xx2 | sort -rk2
Run Code Online (Sandbox Code Playgroud)
首先,我们告诉 Perl 读取整个文件 (slurp),而不是逐行读取。它可能无法处理不适合 RAM 的文件。然后我们使用正则表达式将换行符和空格转换为单个空格,并按第二个字段进行反向排序sort -rk2