2013-10-21 162 views
-1

所以我必須一次運行剪切和排序文件。我使用這個命令:如何運行多個Unix命令?

sort -k2 customers;cut -f7-31 customers

目的是切割線7-31然後按字母順序組織它們,但我不知道如何去實現它。任何輸入都會有所幫助,謝謝。

+0

「cut lines 7-31」 - lines or fields?或列? '切'不能削減線路,所以我想確定你在問什麼。任何一個最小例子的機會? – Amadan

+0

這裏是名副其實的問題: 使用vi創建一個名爲「my_customers」用適當的序幕文件。此腳本應該使用'剪切'和'排序'來創建'客戶'文件的列表,其中包含按客戶名稱排序的客戶姓名和電話。「客戶」文件具有以下固定長度 長度格式: 字段位置 ----------------------- --------- - 客戶編號1-5 名稱7-31 市33-47 州49-50 郵編54-59 電話60-71 – user2902041

+0

即時通訊能夠通過使用切割線切割-f7-31客戶,然後即時通訊也能夠通過使用排序-k2客戶(2代表第二列)的名稱對相同的文件進行排序,現在我只需要它按字母順序給我切割信息..我真的很新,所以即時嘗試解釋最好的我可以 – user2902041

回答

2

目的是切割線,7-31 ...

您可以使用sed

sort -k2 customers | sed '7,31!d' 

這將管sort輸出到sed這將顯示7行 - 從sort輸出的31(包括兩端)。


爲了選擇一個字符範圍,則需要將-c選項提供給cut和不-f(其選擇字段):

sort -k2 customers | cut -c7-31 

這將選擇字符7 - 在每行31從sort輸出。


爲了sort最終輸出,使用另一管道:

sort -k2 customers | cut -c7-31 | sort 
+0

太棒了!非常感謝你,幫助我百萬! – user2902041

+1

我不明白它 - 因爲'cut'和'sort'不會以任何方式影響對方,爲什麼即使打算在後面再度過一次,爲什麼還要用'sort -k2'來打擾呢?不是你的代碼幾乎等同於cut -c7-31 | sort'? – Amadan

+0

@Amadan OP可能需要的想法是如何使用多個管道。我並不不同意關於多餘的「排序」的觀點。也就是說,問題中有一些樣本輸入/輸出總是有幫助的。 – devnull

1

這裏的關鍵是要使用管道這是在外殼的奇最強大的東西之一。見Unix Pipes

管道在UNIX中是美好的;強大。我有沒有提到過這個?

要回答你的問題;改變;|和刪除文件名

sort -k2 customers | cut -f7-31 

會在排序文件的客戶發送的是輸出到剪切的輸入運行;沒有臨時文件。

一般來說,你會怎麼做

sort -k2 customers | cut -f7-31 > customers.modified 

你可以有多個命令在管道,只要你喜歡;所以刪除你想要的副本

sort -k2 customers | uniq | cut -f7-31 > customers.modified