2017-11-11 5 views
-1

複数のファイル(ヘッダファイル、トレーラファイル、データファイル)が必要な場合は、ファイル名を1つのファイルにマージする必要があります。最後のファイル名を保持する3つのファイルをマージするスクリプト/コマンド

入力ファイル

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT (Header file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT (data file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT (trailer file) 

WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT (Header file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT (data file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT (trailer file) 

は、出力ファイルが同じ順序とファイル名のファイルからのデータは以下のようにする必要があります持っている必要があります。

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 

これを達成するには、迅速なヘルプが必要です。

ありがとうございます。すべてのファイル名を想定し

+3

これは、シェルスクリプトを作成することを意味しますか?あなたはどこまで来ましたか?あなたの質問にあなたのスクリプトを含めてください。 – mattias

+0

これは 'cat'の便利な使い方です –

+0

私はこれを試しました ls | awk -F '_' '!x [$ 1] ++ {print $ 1}' | read -r行中 do cat $ line >> $ line \ .txt これは正しいデータで一時ファイルを作成しますが、上記のように名前を変更して既存のファイルを削除する必要があります。最終的なファイルのみを保管してください。 – VTIN

答えて

0

は...(すなわち、9つのフィールドは、単一のアンダースコアで区切られた)あなたの質問に表示されたフォーマットである

いくつかのサンプルデータ:

$ for f in WP*_?_?.TXT 
do 
    echo "+++++++ $f" 
    cat $f 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT 
2024916 header 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT 
2024916 data 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT 
2024078 header 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT 
2024078 data 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT 
2024078 trailer 

私がしました。この単純なケースでは

$ ls WP*_?_?.TXT | cut -d"_" -f1-8 | sort -u | while read -r fprefix 
do 
    # concatenate source files 
    cat ${fprefix}_[123].TXT > ${fprefix}.TXT 

    # display concatenated files 
    echo "+++++++ ${fprefix}.TXT" 
    cat ${fprefix}.TXT 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 
2024916 header 
2024916 data 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
2024078 header 
2024078 data 
2024078 trailer 
+0

ありがとうございました。私がここに追加したかったのは、私が3つのソースファイルを削除し、最終的なファイルしか残したくないということです。どうすればそのファイルを削除できますか? – VTIN

+0

'$ {fprefix}'が正しい場合、3xソースファイルを 'rm $ {fprefix} _?_?TXT' – markp

+0

のように削除することができます。 !あなたは私の一日を作った!!!!!!ここで私が使用している最終的なコードは*****************************************です******* ls * _?_?TXT |カット-d "_" -f1-8 |ソート-u | -r fprefix DO#CONCATENATEソースファイル 猫$ {fprefix} _ [123]。TXT> $ {fprefix} .TXT 読み取る#表示連結ファイルながらエコー「+++++++ $ {fprefix } .TXT」 猫の$ {} fprefix .TXT \tのrm $ {fprefix} _?。TXT エコー "" が******************** を行って********************* – VTIN

0
ls *_?_?.TXT | while read -r filename 
do 
    # concatenate source files 
    cat $filename >> ${filename%_*}.TXT 
    rm $filename 
done 
012:共通/ベースファイルプレフィックスを抽出する cut代わりに awk(少しタイピング)を使用することを選択

番号付け部分が切り取られているファイルにファイルの内容を追加します。

cutsortは不要ですが、既存のターゲットファイルは上書きされません。

関連する問題