2013-07-24 55 views
0

我有一個包含一個符合這個腳本(((A:__ ,B:__):__ ,C:__):__ ,D:__)兩個文件合併數據,以使新的數據集

一個文件,我有每片含500張隨機數其他六個文本文件。我需要將這些隨機數添加到第一個文件中的空白處。

I.e.如果T1,T2,T3,T4,T5,T6是六個文件,他們有數字,如

t1 t2 t3 t4 t5 t6 
2 32 34 213 23 54 
3 34 34 67 56 56 
5 45 78 78 89 32 
5 23 45 45 67 78 
... ... ... ... ... ... 

合併這些結合在一起後,我應該像

(((A:2,B:32):34,C:213):23,D:54) 
(((A:3,B:34):34,C:67):56,D:56) 

一個結果

我已經嘗試了粘貼功能和循環來創建這種對齊方式,但他們不把文本放在正確的位置。我如何使它工作? 我在Linux中這樣做。

+0

您是否必須從第一個文件獲取模板,還是隻能將其硬編碼到腳本中? – Barmar

+3

我提出了很好格式化的問題。你爲什麼撤銷我的工作? – Barmar

+0

是模板應該是相同的第一個文件 – DKangeyan

回答

2

我想這會做到這一點:

paste t1 t2 t3 t4 t5 t6 | 
    awk 'BEGIN { getline < "template"; gsub("__", "%f"); format = $0 } 
     { printf(format"\n", $1, $2, $3, $4, $5, $6); }' 

paste融合了6個輸入文件一起。所述awk腳本的第一行讀取的第一個文件(的文件名替代template)和改變每個__%s,使得它的一個被用作格式字符串與printf

+0

我試過這個腳本。這導致在(((A:0,B:0):0,C:0):0,d:0) (((A:0,B:0):0,C:0):0, d:0) (((A:0,B:0):0,C:0):0,d:0) 因此,所有的空格被0取而代之的,是在你的代碼的命令或文件格式? – DKangeyan

+0

有些數字是小數,櫃面你需要它 – DKangeyan

+0

嘗試使用'%s',而不是'%D',這是否工作? – Barmar

1

一個使用bash文件描述符的解決方案,適用於我...我爲每個文本文件打開一個文件描述符(您必須從FD 3開始,因爲0-2由stdin,stdout,stderr採用。)然後,只要t1中有數據,我就繼續從t2-t6讀取數據,並以所需的格式打印輸出。

#!/bin/bash  
exec 3<> t1.txt  
exec 4<> t2.txt  
exec 5<> t3.txt  
exec 6<> t4.txt  
exec 7<> t5.txt  
exec 8<> t6.txt  
while read one <&3  
    do  
    read two <&4  
    read three <&5  
    read four <&6  
    read five <&7  
    read six <&8  
    echo "(((A:$one,B:$two):$three,C:$four):$five,D:$six)"  
    done  
+0

我問的意見,如果該模式可以被硬編碼到劇本,他說沒有,它來自於第一個文件。 – Barmar