23

列ヘッダーとすべてのページヘッダーを無視して、ここからすべての行を抽出したいと思いますSupported Devices

pdftotext -layout DAC06E7D1302B790429AF6E84696FCFAB20B.pdf - \
 | sed '$d'                                                  \
 | sed -r 's/ +/,/g; s/ //g'                                 \
 > output.csv

結果のファイルは、CSV スプレッドシート形式 (カンマ区切りの値フィールド) である必要があります。

つまり、出力がまったくブレーキをかけないように、上記のコマンドを改善したいと考えています。何か案は?

4

5 に答える 5

6

あなたが望むのはかなり簡単ですが、別の問題も抱えています(あなたがそれを認識しているかどうかはわかりません...)。

まず、-nopgbrkfor ( "No pagebreaks, please!" ) をコマンドに追加する必要があります。出力に表示されるこれらの厄介な^L文字は、後でフィルター処理する必要がないためです。

a を追加するgrep -vE '(Supported Devices|^$)'と、空の行やスペースのみの行など、不要なすべての行が除外されます。

pdftotext -layout -nopgbrk                           \
   DAC06E7D1302B790429AF6E84696FCFAB20B.pdf -        \
 | grep -vE '(Supported Devices|^$|Marketing Name)'  \
 | gsed '$d'                                         \
 | gsed -r 's# +#,#g'                                \
 | gsed '# ##g'                                      \
 > output2.csv

ただし、他の問題は次のとおりです。

  1. テーブル フィールドの一部が空です。
  2. このオプションを使用すると、空のフィールドが-layout一連の空白文字として表示され、同じ行に 2 つ表示されることもあります。
  3. ただし、テキスト列はページごとに同じ間隔ではありません。
  4. ,そのため、「空の CSV フィールド」 (追加のセパレーターが必要な場所) と見なす必要があるスペースの数が行ごとにわかりません。
  5. その結果、現在のコードでは、一部の行に対して (4 つではなく) 1 つ、2 つ、または 3 つのフィールドしか表示されず、これらのフィールドは間違った列に配置されてしまいます!

これには回避策があります。

  1. -x ... -y ... -W ... -H ...パラメータを追加してpdftotext、PDF を列方向にトリミングします。
  2. paste次に、や などのユーティリティを組み合わせて列を追加しますcolumn

次のコマンドは、最初の列を抽出します。

pdftotext -layout -x  38 -y 77 -W 176 -H 500  \
          DAC06E7D1302B790429AF6E84696FCFAB20B.pdf - > 1st-columns.txt

これらは 2 列目、3 列目、4 列目です。

pdftotext -layout -x 214 -y 77 -W 176 -H 500  \
          DAC06E7D1302B790429AF6E84696FCFAB20B.pdf - > 2nd-columns.txt

pdftotext -layout -x 390 -y 77 -W 176 -H 500  \
          DAC06E7D1302B790429AF6E84696FCFAB20B.pdf - > 3rd-columns.txt

pdftotext -layout -x 567 -y 77 -W 176 -H 500  \
          DAC06E7D1302B790429AF6E84696FCFAB20B.pdf - > 4th-columns.txt

ところで、私は少しごまかしました: に使用する値についての手がかりを得るため-xに、列ヘッダーの単語の正確な座標を見つけるために、最初にこのコマンドを実行しまし-y-W:-H

pdftotext -f 1 -l 1 -layout -bbox \
          DAC06E7D1302B790429AF6E84696FCFAB20B.pdf - | head -n 10

を読んで活用する方法を知っていれば、常に良いことですpdftotext -h。:-)

いずれにせよ、適切な CVS 区切り文字を間に挟んで、4 つのテキスト ファイルを横に並べて列として追加する方法については、自分で調べてください。または、新しい質問をしてください:-)

于 2015-05-18T20:27:48.503 に答える