題目描述

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



原題網址

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

輸入格式

輸入一個文字檔案。

輸出格式

將輸入的檔案內容中的換行字元取代成TAB字元後重新輸出。

範例輸入

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

A
BB
CCC
DDDD
EEEEE
FFFFFF
GGGGGGG
HHHHHHHH

如果執行以下指令:

paste myfile.txt myfile.txt

結果為:

A	A
BB	BB
CCC	CCC
DDDD	DDDD
EEEEE	EEEEE
FFFFFF	FFFFFF
GGGGGGG	GGGGGGG
HHHHHHHH	HHHHHHHH

但如果執行以下指令:

cat myfile.txt | paste - -

結果為:

A	BB
CCC	DDDD
EEEEE	FFFFFF
GGGGGGG	HHHHHHHH

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

參考答案

#/bin/bash

paste - - -