2014-10-19 29 views
0

demilited文件中像這樣移調多列在bash

Input1 file1:45764 
Input1 file1:878755 
Input1 file1: 899787 
Input2 file1: 45676 
Input2 file1:769678 
Input2 file1: 6454764 

,我想將它們轉換成

Input1 file1:45764, file1:878755, file1: 899787 
Input2 file1:45676, file1:769678, file1: 6454764 

任何的猜測?在此先感謝

+1

請看一看:?當有人回答我的問題,我應該怎麼辦(HTTP:/ /stackoverflow.com/help/someone-answers) – Cyrus 2015-06-08 02:05:59

回答

1
awk '{b[$1]=b[$1] $2$3" "}END{for (i in b) print i,b[i]}' inputFile 

會產生輸出

Input1 file1:45764 file1:878755 file1:899787 
Input2 file1:45676 file1:769678 file1:6454764 

它做什麼?

{b[$1]=b[$1] $2$3" "}創建一個數組b追加在第二和第三列(因爲有在你的例子filevalue之間的一些空格)。 $2$3插入陣列。陣列是由Inputx索引的關聯數組,其中x1,2...

b['Input1'] = 'file1:45764 file1:878755 file1:899787' 

END塊在輸入文件的結束時,input被excecuted,b陣列的

for (i in b) print i,b[i]}打印內容

+0

你忘記了逗號... :) – 2014-10-19 11:48:09

0

如果你想在輸出中輸入這些逗號,請嘗試

awk '{if(b[$1])b[$1] = b[$1]", "; b[$1] = b[$1] $2 $3}; END{for(i in b)print i, b[i]}' 

或略有更簡潔

awk '{b[$1]=b[$1](b[$1]?", ":"")$2$3}END{for(i in b)print i,b[i]}' 

輸出

Input1 file1:45764, file1:878755, file1:899787 
Input2 file1:45676, file1:769678, file1:6454764