2012-08-03 37 views
4

我有兩個文件如下:水平合併兩個文件,並格式化

File_1

Austin 
Los Angeles 
York 
San Ramon 

File_2

Texas 
California 
New York 
California 

我想他們水平合併如下:

Austin  Texas 
Los Angeles California 
York   New York 
San Ramon California 

我可以合併浩通過使用paste命令rizontally,但格式化會失控。

Austin Texas 
Los Angeles California 
York New York 
San Ramon California 

我意識到paste的工作,因爲它是應該的,但有人可以點我在正確的方向,以獲得正確的格式。

謝謝。

+0

首先,我刪除了所有的標籤從兩個文件。然後,對於第一個文件,我在所有行的末尾添加了25個空格。我在這個文件上做了一個'粘貼',並且它完美地工作。 – visakh 2012-08-03 12:09:29

回答

4

膏使用標籤,所以也許你必須進行後處理文件,並刪除空格標籤:

paste File_1 File_2 | awk 'BEGIN { FS = "\t" } ; {printf("%-20s%s\n",$1,$2) }' 

結果:

Austin    Texas 
Los Angeles   California 
York    New York 
San Ramon   California 
+0

謝謝..我會檢查出 – visakh 2012-08-03 12:04:05

+0

例如用awk: 粘貼a b | awk'{printf(「% - 20s%s \ n」,$ 1,$ 2)}' – Chris 2012-08-03 12:13:14

1

首先,您必須檢查最長行中的字符數。比你可以使用fmt從第一個文件到更長的行長。使用粘貼完成它。 「合併」的文件時

+0

謝謝。我會檢查出它 – visakh 2012-08-03 12:05:31

1

如果你有一個關於場寬的想法,你可以這樣做:

IFS_BAK="$IFS" 
IFS=$'\t' 
paste file_1 file_2 \ 
| while read city state; do 
    printf "%-15s %-15s\n" "$city" "$state" 
    done 
IFS="$IFS_BAK" 

或者這個較短的版本:

paste file_1 file_2 | while IFS=$'\t' read city state; do 
    printf "%-15s %-15s\n" "$city" "$state" 
done 

,或是使用bsdmainutilscolumn工具:

paste file_1 file_2 | column -s $'\t' -t