我希望根据最后一列有一些数字重新排列此文本文件(test.txt)中的行。例如,在下面的文件中,我们看到最后一 column.so 分别看到数字 714,708,816,202,222 现在我想根据最后一列按升序重新排列整列
wwwdev.comp.Hello:443 Hello, Inc. Valid May 20 2018 714
Hostname cert expiry
hidev.comp.Hello:443 Hello, Inc. Valid May 14 2018 708
hidev.comp.Hello:443 Hello, Inc. Valid --------------
gtdev.Hello:443 Hello, Inc. Valid Aug 30 2018 816
wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 202
wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 222
预期运营
: wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 202
Hostname cert expiry
wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 222
hidev.comp.Hello:443 Hello, Inc. Valid --------------
hidev.comp.Hello:443 Hello, Inc. Valid May 14 2018 708
wwwdev.comp.Hello:443 Hello, Inc. Valid May 20 2018 714
gtdev.Hello:443 Hello, Inc. Valid Aug 30 2018 816
试:
sort -k6 -n test.txt
请指教。
注意:我必须跳过没有数字的行并继续下一行。
$ sort -n -k8 file
wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 202
wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 222
hidev.comp.Hello:443 Hello, Inc. Valid May 14 2018 708
wwwdev.comp.Hello:443 Hello, Inc. Valid May 20 2018 714
gtdev.Hello:443 Hello, Inc. Valid Aug 30 2018 816
如果您不知道有多少列,最好用awk
装饰/分类/取消装饰。
$ awk '{print $NF "t" $0}' file | sort -n -k1,1 | cut -f2-
使用 GNU awk 4.* 表示sorted_in:
$ cat tst.awk
/[0-9]+s*$/ { sorted[$NF]=$0; next }
{ fixed[NR]=$0 }
END {
PROCINFO["sorted_in"] = "@ind_num_asc"
for (key in sorted) {
if (++onr in fixed) {
print fixed[onr++]
}
print sorted[key]
}
}
$ awk -f tst.awk file
wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 202
Hostname cert expiry
wwwdev.Hello:443 Hello, Inc. Valid Dec 24 2016 222
hidev.comp.Hello:443 Hello, Inc. Valid --------------
hidev.comp.Hello:443 Hello, Inc. Valid May 14 2018 708
wwwdev.comp.Hello:443 Hello, Inc. Valid May 20 2018 714
gtdev.Hello:443 Hello, Inc. Valid Aug 30 2018 816