如何对提取出的数字结果进行排序并转为逗号分隔格式
如何对提取出的数字结果进行排序并转为逗号分隔格式
嘿,这个需求太常见啦,我来给你快速搞定~你原来的命令已经能正确提取出数字了,只需要在后面加几步处理,就能实现排序+逗号分隔的效果。
首先给你最直观的修改方案,直接在原命令后面追加管道命令就行(顺便提一句,没必要用cat读文件再传给grep,直接让grep读取文件更高效哦):
grep "word:" filename.txt | awk '{print $2}' | sort -n | tr '\n' ',' | sed 's/,$//'
我给你拆解下每个部分的作用:
sort -n:按数值大小升序排序,要是你想要从大到小排,换成sort -nr就行(r是reverse的意思)tr '\n' ',':把每行结尾的换行符替换成逗号,这样分散的数字就变成连在一起的格式了sed 's/,$//':去掉最后一个多余的逗号,避免结尾留下个孤零零的逗号影响美观
用你给出的例子测试的话,原输出是:
403
404
423
406
401
用上面的命令后,会输出:401,403,404,406,423
如果你想更精简,也可以用awk一步完成提取、排序和拼接,不过可读性会稍差一点,给你参考下:
awk '/word:/ {arr[$2]} END {PROCINFO["sorted_in"]="@ind_num_asc"; for(num in arr) printf "%s,", num; print ""}' filename.txt | sed 's/,$//'
这个是把提取到的数字存到数组里,然后按数值升序遍历数组,用printf拼接成逗号分隔的字符串,最后同样去掉末尾的逗号。
备注:内容来源于stack exchange,提问作者Nick Veronski
相关产品推荐
相关产品推荐

