あなたが望むのはかなり簡単ですが、別の問題も抱えています(あなたがそれを認識しているかどうかはわかりません...)。
まず、-nopgbrk
for ( "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
ただし、他の問題は次のとおりです。
- テーブル フィールドの一部が空です。
- このオプションを使用すると、空のフィールドが
-layout
一連の空白文字として表示され、同じ行に 2 つ表示されることもあります。
- ただし、テキスト列はページごとに同じ間隔ではありません。
,
そのため、「空の CSV フィールド」 (追加のセパレーターが必要な場所) と見なす必要があるスペースの数が行ごとにわかりません。
- その結果、現在のコードでは、一部の行に対して (4 つではなく) 1 つ、2 つ、または 3 つのフィールドしか表示されず、これらのフィールドは間違った列に配置されてしまいます!
これには回避策があります。
-x ... -y ... -W ... -H ...
パラメータを追加してpdftotext
、PDF を列方向にトリミングします。
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 つのテキスト ファイルを横に並べて列として追加する方法については、自分で調べてください。または、新しい質問をしてください:-)