如何将文件从最长到最短的行暂时排åºï¼Œç„¶åŽå†æ¢å¤åˆ°åŽŸå§‹é¡ºåºï¼Ÿ

时间:2014-08-16 04:55:43

标签: bash perl awk sed

Sorting lines from longest to shortest中的答案æ供了å„ç§æ–¹æ³•æ¥å°†æ–‡ä»¶çš„行从最长到最短排åºã€‚

我需è¦æš‚时将文件从最长到最短排åºï¼Œä¸ºBASH脚本æ供一些时间æ¥æ‰§è¡ŒæŸäº›æ“作æ¥ç¼–辑å„ç§å†…容,然åŽåœ¨BASH脚本完æˆåŽå°†æ–‡ä»¶æ¢å¤åˆ°åŽŸå§‹é¡ºåºã€‚ / p>

我如何首先将文件从最长到最短排åºï¼Œä½†ä¹‹åŽèƒ½å¤Ÿæ¢å¤è®¢å•ï¼Ÿ

2 个答案:

答案 0 :(得分:4)

通过以下步骤增强linked answer:

  1. 将长度和行å·æ·»åŠ åˆ°æ¯è¡Œçš„å‰é¢ï¼ŒæŒ‰é•¿åº¦æŽ’åºï¼Œå‰ªåˆ‡é•¿åº¦ï¼ˆå°±åƒåœ¨é“¾æŽ¥çš„答案中一样)

    perl -ne 'print length($_)." $. $_"' file.txt | sort -r -n | cut -d ' ' -f 2- > newfile.txt
    
  2. 执行bash转æ¢ï¼ˆå¿½ç•¥æ¯è¡Œçš„第一个数字)

    如果由于æŸç§åŽŸå› ä½ æ— æ³•ä½¿ç”¨æ•°å­—å‰ç¼€è¿›è¡Œæ— å®šå½¢ç¿»è¯‘,那么将数字拆分æˆä¸€ä¸ªå•ç‹¬çš„文件并将其åˆå¹¶ä¸ºåŽç¼€ã€‚

  3. 按行å·æŽ’åºï¼Œç„¶åŽå‰ªåˆ‡è¡Œå·ä»¥å°†æ–‡ä»¶æ¢å¤åˆ°ä¹‹å‰çš„状æ€ã€‚

    sort -n newfile.txt | cut -d ' ' -f 2- > file.txt
    

答案 1 :(得分:2)

将原始行顺åºå­˜å‚¨åœ¨å•ç‹¬çš„文件中å¯èƒ½æ˜¯æ‚¨â€‹â€‹éœ€è¦çš„:

awk -v OFS='\t' '{print length($0), NR, $0}' infile |
sort -k1rn -k2n |
tee order.txt |
cut -f3- > sorted.txt

do stuff with sorted.txt then

cut -f2 order.txt |
paste - sorted.txt |
sort -n |
cut -f2- > outfile

ä½ ä¸èƒ½è¯´å‡ºä½ æƒ³è¦ç”¨ç›¸åŒé•¿åº¦çš„线åšä»€ä¹ˆï¼Œä½†åœ¨è¿™ç§æƒ…况下,上é¢å°†ä¿ç•™åŽŸå§‹æ–‡ä»¶çš„顺åºã€‚如果这ä¸æ˜¯æ‚¨æƒ³è¦çš„,请使用sort -rn命令,根æ®éœ€è¦ä¿®æ”¹-k。