誰かが以下の変換シェルスクリプトを助けることができますか?
ソースファイルファイル1:はい
EXCHANGE_ID : 192, 410,
EXCHANGE_DTTM : 2015-06-11+02:18:40+0000, 2015-06-11+02:12:28+0000,
PART_NAME : MRT, LR04,
PART_TRANS_ID : 123, JAS04,
M_NAME : FAILED, FAILED,
M_DTTM : 2015-06-11T02:18:40+0000 2015-06-11T02:12:28+0000
出力は次のとおりです
EXCHANGE _ID : 192
EXCHANGE_ DTTM : 2015-06-11T02:18:40+0000
PART_NAME : MRT
PART_TRANS_ID : 123
M_NAME : FAILED
M _DTTM : 2015-06-11T02:18:40+0000
EXCHANGE _ID : 410
EXCHANGE_DTTM : 2015-06-11T02:12:28+0000
PART_NAME : LR04
PART_TRANS_ID : JAS04
M_NAME : FAILED
M_DTTM : 2015-06-11T02:12:28+0000
これが私が今まで試したことです:
awk '{ for (i = 1; i <= NF; i++) f[i] = f[i] " " $i ; if (NF > n) n = NF } END { for (i = 1; i <= n; i++) sub(/^ */, "", f[i]) ; for (i = 1; i <= n; i++) print f[i] } ' FAILED.csv > TGT_FAILED.out
ただし、これは目的の形式ではなくCSV形式でコンテンツを印刷するだけです。以下は、上記の出力ではなく、実際の出力の例です。
EXCHANGE_ID EXCHANGE_DTTM PART_NAME PART_TRANS_ID M_NAME M_DTTM
: : : : : :
192, 2015-06-11+02:18:40+0000, MRT, 123, FAILED, 2015-06-11T02:18:40+0000
410, 2015-06-11+02:12:28+0000, LR04, JAS04, FAILED, 2015-06-11T02:12:28+0000
ベストアンサー1
どうですか?
awk -F'[ \t,]+' '{a=a$1"\t"$2"\t"$3"\n"; b=b$1"\t"$2"\t"$4"\n"} END {print a; print b}' data.txt
ここでは、1 つ以上のスペース、タブ、またはコンマをフィールド区切り文字と見なします。次に、各行に出力を作成します。最後に結果を印刷します。たとえば、これは非常に汚れたライナーです。たとえば、印刷する前にファイル全体を読み取る必要があるため、大きなファイルの場合はメモリを消費しますが、小さいファイルの場合はトリックを実行する必要があります。
あなたの入力によると、次のような結果が発生します。
EXCHANGE_ID : 192
EXCHANGE_DTTM : 2015-06-11+02:18:40+0000
PART_NAME : MRT
PART_TRANS_ID : 123
M_NAME : FAILED
M_DTTM : 2015-06-11T02:18:40+0000
EXCHANGE_ID : 410
EXCHANGE_DTTM : 2015-06-11+02:12:28+0000
PART_NAME : LR04
PART_TRANS_ID : JAS04
M_NAME : FAILED
M_DTTM : 2015-06-11T02:12:28+0000
フィールド間隔を適切に指定するには、次のように呼び出しにsprintfを追加できます。
awk -F'[ \t,]+' '{label=sprintf("'%-10s'",$1); a=a""label"\t"$2" "$3"\n"; b=b""label"\t"$2" "$4"\n"} END {print a; print b}' data.txt
これはよりきれいな出力を提供します。
EXCHANGE_ID : 192
EXCHANGE_DTTM : 2015-06-11+02:18:40+0000
PART_NAME : MRT
PART_TRANS_ID : 123
M_NAME : FAILED
M_DTTM : 2015-06-11T02:18:40+0000
EXCHANGE_ID : 410
EXCHANGE_DTTM : 2015-06-11+02:12:28+0000
PART_NAME : LR04
PART_TRANS_ID : JAS04
M_NAME : FAILED
M_DTTM : 2015-06-11T02:12:28+0000