我希望根据最后一列有一些数字来重新排列这个文本文件(test.txt)中的行。例如,在下面的文件中,我们分别看到最后一列的数字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
预期的O / P:
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
请建议。
注意:我必须跳过没有数字的行并继续下一行。
答案 0 :(得分:4)
$ 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-
答案 1 :(得分:0)
使用GNU awk 4. * for 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