[HackerRank]粘貼指令2(Paste - 2)

題目描述

輸入文字檔案內容,每行都是一個城市的名稱和其所在的洲,每個欄位使用「,」字元分隔。請每隔三行將換行字元取代成「;」字元後重新輸出。

原題網址

https://www.hackerrank.com/contests/the-linux-bash-fest/challenges/paste-2

輸入格式

輸入一個文字檔案。

輸出格式

將輸入的檔案內容中每隔三行的換行字元取代成「;」字元後重新輸出。

範例輸入

Albany, N.Y.
Albuquerque, N.M.
Anchorage, Alaska
Asheville, N.C.
Atlanta, Ga.
Atlantic City, N.J.
Austin, Texas
Baltimore, Md.
Baton Rouge, La.
Billings, Mont.
Birmingham, Ala.
Bismarck, N.D.
Boise, Idaho
Boston, Mass.
Bridgeport, Conn.

範例輸出

Albany, N.Y.;Albuquerque, N.M.;Anchorage, Alaska
Asheville, N.C.;Atlanta, Ga.;Atlantic City, N.J.
Austin, Texas;Baltimore, Md.;Baton Rouge, La.
Billings, Mont.;Birmingham, Ala.;Bismarck, N.D.
Boise, Idaho;Boston, Mass.;Bridgeport, Conn.

解題概念

「paste」指令可以將許多個檔案合併成一個檔案,預設的話,同一個檔案內容會在同一個欄(Column),欄位間使用TAB字元做分隔。「-d」選項可以指定分隔欄或列要使用的字元。在本題中需要把一個檔案內每隔三行的換行字元取代成「;」字元後重新輸出,在這裡有個比較特別的用法,那就是我們可以利用「-」來代表標準輸入作為「paste」指令的輸入,雖然「paste」指令如果不指定任何檔案路徑或是「-」的話預設也會使用標準輸入,但如果手動去指定「多個」「-」,則可以將標準輸入切割成類似多個內容交錯的檔案。例如現在有個檔案名稱是「myfile.txt」,其內容為:

如果執行以下指令:

paste myfile.txt myfile.txt

結果為:

但如果執行以下指令:

cat myfile.txt | paste - -

結果為:

「- -」可以想像成有兩個編號為A、B的虛擬串流,一開始會將標準輸入的第一行寫入A串流,再將標準輸入的第二行寫入B串流,接著再把標準輸入的第三行寫入A串流,依此類推,一直交替寫入進去。

參考答案

關於作者

Magic Len

Magic Len

各位好,我是Magic Len,是這網站的管理員。我是台灣台中大肚山上人,畢業於台中高工資訊科和台灣科技大學資訊工程系,曾在桃機航警局服役。我熱愛自然也熱愛科學,喜歡和別人分享自己的知識與經驗。如果你有興趣認識我,可以加我的Facebook,並且請註明是從MagicLen來的。

相關文章