2014-03-27 102 views
1

我有一個使用AWK腳本的任務,我很難理解爲什麼我會遇到這個問題。基本上我只想在腳本結尾處輸出一行簡單的輸出,但由於某種原因,它不起作用。Awk腳本;打印不輸出我想要的地方

print "Listed are their names (sorted by last names) and phone numbers:" 
for(i = 1; i < x; i++)\ 
     {print " "topNames[i]"--"topPhones[i] | "sort -k 2";} 
print "  Thanks to all of you for your continued support!!" 

的輸出:

Listed are their names (sorted by last names) and phone numbers: 
     Thanks to all of you for your continued support!! 
    John Goldenrod--(916) 348-4278 
    Mike Harrington--(510) 548-1278 
    Archie McNichol--(206) 548-1348 
    Guy Quigley--(916) 343-6410 
    Dan Savage--(406) 298-7744 
    Tom Savage--(408) 926-3456 
    Elizabeth Stachelin--(916) 440-1763 

,而我想它是:

Listed are their names (sorted by last names) and phone numbers: 
    John Goldenrod--(916) 348-4278 
    Mike Harrington--(510) 548-1278 
    Archie McNichol--(206) 548-1348 
    Guy Quigley--(916) 343-6410 
    Dan Savage--(406) 298-7744 
    Tom Savage--(408) 926-3456 
    Elizabeth Stachelin--(916) 440-1763 
     Thanks to all of you for your continued support!! 

我真的很困惑,爲什麼它不是在命令輸出我想它。

另請注意。 AWK腳本編程有什麼好的編程風格(註釋等)?我習慣於使用C++,所以我不確定在哪裏放置縮進以及如何對齊我的註釋。

任何幫助將不勝感激。

回答

2

您之後僅一次執行的END規則,大概需要close()的排序:

print "Listed are their names (sorted by last names) and phone numbers:" 
sortcmd = "sort -k 2" 
for (i = 1; i < x; i++) { 
    printf " %s--%s\n", topNames[i], topPhones[i] | sortcmd 
} 
close(sortcmd) 
print "Thanks to all of you for your continued support!!" 

http://www.gnu.org/software/gawk/manual/html_node/Redirection.html#Redirection

+0

謝謝!這工作。有沒有什麼辦法可以做到這一點,而不創建sortcmd,只使用常規排序? – JSarwer

+0

你可以打印... | 「sort -k 2」'然後'close(「sort -k 2」)'。使用變量只是爲了避免命令名稱不匹配造成的錯誤(手冊中明確指出它們必須完全匹配) –

+0

注意:如果Tom的區域代碼小於Dan的區號,「Dan Savage」會排在「Tom Savage」之後。嘗試'printf「%s - %s \ n」,姓名,電話| 「sort -k 2,2 -k 1,1」' –

0

把最後的print語句在END

END { print "  Thanks to all of you for your continued support!!"} 

doc

所有的輸入被讀取

+0

我忘了提,我的劇本的這整個部分處於「END」 – JSarwer

+0

@JSarwer:你可以有多個'END's。嘗試把它放在一個單獨的(也看看@glenn jackman的答案) – AndyG