2017-05-26 46 views
0

我想通過使用unix腳本轉置文本文件的行和列。 任何人都可以請建議工作?如何轉置unix shell中的行和列?

輸入文件:INPUT.TXT

DM_AG_POSN_FDIC_BASE 22-MAY-2017 02:56:00 03:15:46 00:19:46 
DM_AG_POSN_FDIC_BASE 23-MAY-2017 03:26:47 03:45:33 00:18:46 
DM_EC_CONS_POSN_BASE_HELPER  22-MAY-2017 03:06:43  03:08:38 00:01:55 
DM_EC_POSN_B3_ENRICHED 22-MAY-2017 03:08:43  03:23:14 00:14:31 
DM_EC_POSN_B3_PRORATED 22-MAY-2017 03:23:27  03:30:07 00:06:40 
DM_EC_CONS_POSN_BASE_HELPER  23-MAY-2017 03:36:21  03:38:10 00:01:49 
DM_EC_POSN_B3_ENRICHED 23-MAY-2017 03:38:23  04:00:08 00:21:44 
DM_EC_POSN_B3_PRORATED 23-MAY-2017 04:00:08  04:06:30 00:06:21 

所需的輸出文件是:

DM_AG_POSN_FDIC_BASE     DM_EC_CONS_POSN_BASE_HELPER    DM_EC_POSN_B3_ENRICHED     DM_EC_POSN_B3_PRORATED 

22-MAY-2017 02:56:00 03:15:46 00:19:46 22-MAY-2017 03:06:43 03:08:38 00:01:55    22-MAY-2017 03:08:43 03:23:14 00:14:31 22-MAY-2017 03:23:27 03:30:07 00:06:40 
23-MAY-2017 03:26:47 03:45:33 00:18:46 23-MAY-2017 03:36:21 03:38:10 00:01:49  23-MAY-2017 03:38:23 04:00:08 00:21:44 23-MAY-2017 04:00:08 04:06:30 00:06:21 

注:行數不固定,但第一欄的名字總是輸入不變。 txt文件。

欣賞您的建議/解決方法!

由該組的其中一位成員建議的代碼。

sed 's/ \+/|/g;s/ $//' file | 
awk -F '|' '{x=$1;$1="";a[x]=a[x]"|" substr($0, 2)} END{for(i in a) print i a[i]}' | 
awk -F '|' '{for (i=1; i<=NF; i++) a[i,NR]=$i; max=(max<NF?NF:max)} END {for (i=1; i<=max; i++) {for (j=1; j<=NR; j++) printf "%s%s", a[i,j], (j<NR?"|":ORS) }}' | 
column -t -s '|' 

我越來越像輸出:

DM_AG_POSN_FDIC_BASE 
22-MAY-2017 02:56:00 
-BLANK- --> There is no output from 2nd line onwards(tried for only one record). Could you please check this ? 
+0

INPUT.txt中的列分隔符是什麼?製表符或空格? – Cyrus

+0

嗨,賽勒斯,它的空間 – user7268185

回答

1

這裏有一個是脆弱的輸入數據。 sort基的記載,在awk分割$ 1和在單獨行上記錄的其餘部分和rs用於調換到這3行以漂亮的輸出:

$ awk '{if(p!=$1)print $1;p=$1;sub(p,"",$0);$1=$1}1' <(sort file) | rs -e -t 3 
DM_AG_POSN_FDIC_BASE     DM_EC_CONS_POSN_BASE_HELPER    DM_EC_POSN_B3_ENRICHED     DM_EC_POSN_B3_PRORATED 
22-MAY-2017 02:56:00 03:15:46 00:19:46 22-MAY-2017 03:06:43 03:08:38 00:01:55 22-MAY-2017 03:08:43 03:23:14 00:14:31 22-MAY-2017 03:23:27 03:30:07 00:06:40 
23-MAY-2017 03:26:47 03:45:33 00:18:46 23-MAY-2017 03:36:21 03:38:10 00:01:49 23-MAY-2017 03:38:23 04:00:08 00:21:44 23-MAY-2017 04:00:08 04:06:30 00:06:21 

每個標題項目時預期具有數據的恰好2行就像樣本數據一樣。如果情況並非如此,請更新數據以更好地反映真實情況。

+0

感謝主席先生的迴應。 – user7268185

+0

嗨,先生,我試着實現你的代碼,但「rs」在我的終端未識別。你能建議嗎? – user7268185

+0

'rs'完成轉置,因此您需要使用此解決方案。你可能會安裝它並在未來受益嗎? 'rs - 重塑一個數據數組',如果你用'apt-cache'搜索它:'apt-cache search rs | grep^rs'。 –