2017-01-25 7 views
0

入力master_table_list.txt(で区切られたサンプル単一のレコード|)の作成からinsert_table_preparation.txtに必要なシェルスクリプト - エキス区切りフィールド - フィールドリストフィールドリストの一部


hub_business_partner|`hash_business_partner` string COMMENT 'Surrogate Key for Business Partner', `key_business_partner` string COMMENT 'Business Key for Business Partner', `rec_srce` string COMMENT 'Record Source'|`rec_date` timestamp|key_business_partner|rec_date|COMMENT 'Business Partner Hub'|customer 

出力を


customer|hub_business_partner|hash_business_partner,key_business_partner,rec_srce,rec_date 

コード使用


echo $line | awk -F'|' '{printf("'%s'\n",);}' | grep -o '`.*`'| tr -d '``' >>insert_table_preparation.txt 

少なくとも2番目のフィールド(フィールドリスト)を少なくとも抽出してください。

ありがとうございます。

よろしく、 マロ

+2

ますので、私たちにテキストの山を見て、あなたが翻訳をするために使用したいアルゴリズムに関する情報がなく、あなたがすでに持っているコマンドラインが何かを構築してくれるものではない、それからテキストのいくつかの他の山を印刷するように要求していますあなたを助ける方法はありません。投稿された入力を投稿された出力に変換するアルゴリズムを実装するのに役立つアルゴリズムを説明するために質問を編集すると、いくつかの回答が得られる可能性があります。 –

答えて

0

これは間に合わせと-応答であるが、これはあなたの例の入力行を読み取り、あなたの例の出力を生成します。あなたは何の反応もなかったしました私見

echo $line | sed -e "s/ string COMMENT[^,|]*//g" -e "s/\`//g" -e "s/, /,/g" | awk 'BEGIN{ FS = "|"; OFS = "" } { split($2, foo, ","); print $7, "|", $1, "|", foo[1], ",", foo[2], ",", foo[3], "|", $5 }' 
+0

こんにちはレスリー、あなたの上記の "汚い少し"応答が正常に動作しています。ありがとうございました。しかし、フィールド名の数が異なる場合、それらを分離するための一般的な方法はありますか?私たちはfoo [1]、foo [2]などを使用しているようです。foo [i]のようなものがあり、より一般的なソリューションにすることはできますか?あなたの努力のためにもう一度ありがとう。 – Malo

+0

マロ、私の反応は役に立ちました。 split関数は、作成する配列内のフィールド数を返します。 k = split($ 2、foo、 "、"); for(i = 1; i <= k; i ++) print foo [i]; – Leslie

関連する問題