2017-04-21 56 views
0

我的文件列轉換是這樣的:動態行在UNIX

TABLE|COLUMN|VALUE 
vehicle|vehicle|vehicle 
vehicle|make|toyota 
vehicle|model|corolla 
vehicle|year|1986 
vehicle|color|black 
vehicle|vehicle|vehicle 
vehicle|make|honda 
vehicle|model|odyssey 
vehicle|year|2016 
vehicle|color|black 
vehicle|Number|123 

預期輸出: -

Vehicle|make|model|year|color|number 
vehicle|toyota|corolla|1986|black| 
vehicle|honda|odyssey|2016|black|123 

用awk是否有可能。因爲列的列表將是動態的。

提前致謝!

回答

0

AWK方法(但列的順序不嚴格):

輸入文件inputfile包含:

vehicle|vehicle|vehicle 
vehicle|make|toyota 
vehicle|model|corolla 
vehicle|year|1986 
vehicle|color|black 
vehicle|vehicle|vehicle 
vehicle|make|honda 
vehicle|model|odyssey 
vehicle|year|2016 
vehicle|color|black 
vehicle|Number|123 

AWK腳本transform.awk

#!/bin/awk -f 
BEGIN { FS="|"; h= ""; maxRows=1; } 
{ 
    tmp[$2]++; 
    if (maxRows < tmp[$2]) { 
     maxRows=tmp[$2] 
    } 
    a[$2][tmp[$2]]=$3; 
} 
END{ 
    for (i in tmp) { h = sprintf("%s%10s %s", h, i, FS)} 
    gsub(/\|$/, "", h); 
    print h ""; 
    for (j=1;j<=maxRows;j++){ 
     row="" 
     for (i in a) { 
      row = sprintf("%s%10s %s", row, a[i][j], FS); 
     } 
     gsub(/\|$/, "", row); 
     print row; 
    }  
} 

用法

awk -f transform.awk inputfile 

輸出:

model | vehicle |  year | Number |  color |  make 
    corolla | vehicle | 1986 |  123 |  black | toyota 
    odyssey | vehicle |  2016 |   |  black |  honda 
+0

感謝您的答覆 期望是: - 車輛|製造|型號|年份|顏色|編號 車輛|豐田|花冠| 1986 |黑色| 車輛|本田|奧德賽| 2016 |黑色| 123 123號應落在本田行。這將有所幫助。 – user3789011