質問: ファイルが複数行に分割される単一のレコード informaticaからの変換後、フラットテキストファイルを使用してteradataテーブルに格納しています。このファイルには14個のフィールドが含まれています(〜区切り)。しかし、レコードが複数の行に散らばっているため、informaticaはそれを取得できません。sed/awkまたはその他のコマンドを使用して区切り文字をカウントすることでレコードを結合する方法はありますか?サンプルレコード---48602040112~4100010080701242015~2010-01-21 10:23:44~foods~7~poultry ~perdue smart chicken~circular~06 -jan-10~24-jan-10~$5.99~24 oz., select varieties up to 4 at this price, additional save up to $4.00 load up on savings~~1598 理想的には次のようになります-48602040112~4100010080701242015~2010-01-21 10:23:44~foods~7~poultry ~ perdue smart chicken~circular~06-jan-10~24-jan-10~$5.99~24 oz., select varieties up to 4 at this price, additional save up to $4.00 load up on savings~~1598 はっきりしない場合は、改行文字が含まれています。
回答: 分割フィールドをスペースありとスペースなしのどちらで結合するかを決定する方法は明確ではありません。 _06<nl>-jan-10_は改行を削除する必要がありますが、_varieties<nl>up to_は改行をスペースに置き換える必要があります。上記の懸念を無視すると、このプロトタイプのawkコマンドにたどり着くことができます。_$ awk 'begin { rs = "~" } { gsub(/\n/,"",$0); printf("%s", $0); if (++i < 14) { printf("~"); } else { i = 0; printf("\n"); } }' < in.txt > out.txt __~_でレコードを分割して、各フィールドが実際にレコードになるようにします。次に、各レコードの空白をgsubでトリミングし、フィールド1から13の場合は区切り文字を続けて印刷し、14の場合は改行を続けて印刷します(カウントをリセットします)。フィールドの数が14で割り切れない場合、出力の最後の行が不完全になり、改行ではなく_~_で終了します。結合の問題に対処するための可能な方法は、改行をそのままにするか、データに出現しない文字に置き換えることです。後処理ステップとして結合を実行します。 _@_がデータに含まれていないとします。改行を_@_に置き換えると、通常のテキスト処理ツールを使用して簡単なパターン置換を適用できます。たとえば、s/([0-9])@-/\1-/の行に沿った置換は、_06@-jan_のような壊れた日付を処理します。このロジックでは、改行の削除が必要な特定のフィールドのデータ型を理解する必要がある場合があります。これにより、たとえば、日付を特別に処理できます。