2014-10-01 97 views
1

如何根據字段位置對文件進行排序?Unix - 在shell腳本中排序

例如,我需要對下面給出的文件進行排序。基於第4,第5和第8位。請幫忙。 我嘗試下面的命令,它不工作:(

sort -d -k 3.42,44 -k 4.47,57 -k 5.59,70 -k 8.73,82 


010835   03   0000000010604CAQZ 0912104072 QNZAW AZ ATC 1704698441 
010835   03   0000000010604CZWX 7823775785 WDXSD GZ DDF 2804698441 
010835   03   0000000010604CBEC 8737518498 DICDC CY HWT 0904698441 
010835   03   0000000010604CERV 5648240160 FFVFV DZ UXE 8404698441 
010835   03   0000000010604CTTV 2555338251 TTBGB FZ EZS 9504698441 
010835   03   0000000010604CADB 1465045344 BINHH TZ QKZ 4604698441 
010835   03   0000000010604CIFN 2374902637 NOMJU VZ XHU 6704698441 
010835   03   0000000010604COGM 3281553523 JSLKI YZ CLK 5804698441 
010835   03   0000000010604CPCL 4190899186 PQJLL QZ UPL 3004698441 

回答

1

試試這個命令:

sort -k4,4 -k5,5 -k8,8 input.txt 

sort手冊:

-k, --key=POS1[,POS2] 
      start a key at POS1, end it at POS2 (origin 1) 

    POS is F[.C][OPTS], where F is the field number and C the character position in the field. OPTS is 
    one or more single-letter ordering options, which override global ordering options for that key. If 
    no key is given, use the entire line as the key. 

在你命令:
-k 3.42,44表示start from (42th char of 3rd field) to (44th field)
你的意思是-k 3.42,3.44

0

你可以嘗試:

sort -d -t $'\n' -k 1.42,1.44 -k 1.47,1.57 -k 1.59,1.70 -k 1.73,1.82 input.txt>

你會得到這樣的:

 
010835   03   0000000010604CADB 1465045344 BINHH TZ QKZ 4604698441 
010835   03   0000000010604CAQZ 0912104072 QNZAW AZ ATC 1704698441 
010835   03   0000000010604CBEC 8737518498 DICDC CY HWT 0904698441 
010835   03   0000000010604CERV 5648240160 FFVFV DZ UXE 8404698441 
010835   03   0000000010604CIFN 2374902637 NOMJU VZ XHU 6704698441 
010835   03   0000000010604COGM 3281553523 JSLKI YZ CLK 5804698441 
010835   03   0000000010604CPCL 4190899186 PQJLL QZ UPL 3004698441 
010835   03   0000000010604CTTV 2555338251 TTBGB FZ EZS 9504698441 
010835   03   0000000010604CZWX 7823775785 WDXSD GZ DDF 2804698441 

的想法是使用$ '\ n'(換行符)char是字段分隔符所以每行是1字段

靈感來自http://www.computing.net/answers/unix/sort-file-by-position-/7735.html