2016-08-04 4 views
1

こんにちは私は、項目タグを含むxmlファイルを分割しようとしています。 1つのファイルに250個のアイテムがあるので、ファイル全体を50個のアイテム(およびその内容)を含む5つの小さなファイルに分割したいと考えています。私はLinux script: how to split a text into different files with match pattern特定のパラメータを指定して、AWKを使用して大きなテキストファイルを分割する

awk '{if ($0 ~ /<item>/) a++} { print > ("NewDirectory"a".xml") }' 

このリンクから得たもの

しかし、これは1つのアイテムにつき1つのファイルにファイル全体を分割。ですから、ファイルを50個のアイテムに分割するためにこのステートメントを修正するのに助けが必要です。

+2

[mcve]を与えるマインド? – sjsam

+1

正しく作成された 'xml'ファイルを再作成しようとするなら、これよりも多くのコードが必要になります。そして、 'xml'と正規表現は問題なく(つまりこの問題を解決することができたとしても)決して「一緒に遊べる」ことができないので、あなたは後であなたのマネージャーに失望のための基礎を築いています。 xml対応のツールで解決しなければならない、非常に高度なXML問題があります。 @sjsamが示すように、あなたのQには小さなサンプル入力、予想される出力、現在のコードとエラーメッセージが必要です。 – shellter

+1

なぜ「小さなサンプル入力」ですか? 2行×2行のファイルを作成する4行の1ファイルについて問題を解決すれば、実際の問題を解決することができます。がんばろう。 – shellter

答えて

1

同時にたくさんのファイルを開き、GNU awkを使用していません。ちょうどgawkを取得します。

また、awkを学ぶには、Arnold RobbinsのEffective Awk Programming、第4版を読んでください。

+0

ありがとうございます、いいえ、GNU awkを使用していません。 awkとgawkの違いは何ですか? –

+1

awkはgawkがclydesdaleになるための馬です。 "awk"は、暗黙的な読み込みループと条件/アクション構文でテキストを操作するツールです。いくつかのawkツールがあります(古いawk、新しいawk、真のawk、mawk、tawk、gawk、OSX awk、/ usr/xpg4/bin/awkなど)現在サポートされている/利用可能な機能です。 awkにはPOSIX標準があります。したがって、awkの亜種の多くは、POSIXが最低限定義するものを行いますが、追加の機能も備えています。 awkの亜種の中にはPOSIXをサポートしていないものもありますので避けてください。 GNU awkを入手してください。 –

0

試してみてください。

awk '$0~/<item>/' | split -l50 -d - NewDirectory. 

説明:

  • awkNewDirectory.00という名前<item>

  • splitは50行でファイルに標準入力分割します含まれている行だけを抽出し、NewDirectory.01など。man splitは詳細情報そこで

    awk '/<item>/ && (++a%50 == 1) { ++c } { print > ("NewDirectory"c".xml") }' 
    

    あなたは(クローズを追加する必要があるかもしれません)の場合:元のコマンドでは、あなたはそれがないと、あなたが完全なawkでXMLを解析しようと周りの問題を理解言うことないと仮定すると、

+0

私は、50個の複数行のアイテムレコードのファイルを作成し、アイテム開始タグを含む50行だけのファイルを作成することは意図していないと思います。 –

+0

'awk'フィルタは' $ 1'だけでなくテストに合格する行全体を表示します。 –

+1

そうですが、私は**開始タグを含んでいる行を言っています。しかし、アイテム全体が単一の行にあると考える理由はありません。 –

関連する問題