2017-05-26 13 views
0

UNIXスクリプトを使用してテキストファイルの行と列を転記したいとします。 誰でもWork Aroundをお勧めしますか?Unixシェルに行と列を転記する方法は?

入力ファイル: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 

注:行の数は一定ではありませんが、最初の列名は、常にINPUTのための定数です。 txtファイル。

あなたの提案/回避策をお見逃しなく!

このグループのアクティブメンバーの1人によって提案された実装されたコード。ここで入力されたデータに脆弱で1だ

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

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 '|' 

は、私のような出力を取得しています。各ヘッダ項目はデータの正確に2行を有することが期待される

$ 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 

sortグループレコードは、Awkのは$ 1と別の行にレコードの残りの部分とrsはかなりの出力と3列にそれを転置するために使用される分割しますサンプルデータのように。そうでない場合は、実際の状況をよりよく反映するようにデータを更新してください。

+0

お返事ありがとうございました。 – user7268185

+0

こんにちは、私はあなたのコードを実装しようとしましたが、 "rs"は私の端末では不明です。あなたはお勧めできますか? – user7268185

+0

'rs'は転置を行いますので、この解決策に必要です。あなたはそれをインストールして将来的にそれから利益を得ることができますか? 'apt-cache'で検索すると、' rs - データ配列の形を変えます ':apt-cache search rs | grep^rs'。 –