Text-Processing
我可以使用 awk 修改 PDF 中的 FitH 值嗎?
我曾經
pandoc
使用 pdfroff 作為引擎將 Markdown 文件轉換為格式化的 PDF。程式碼是:pandoc -s --toc --pdf-engine=pdfroff -o test.pdf test.md
輸出文件
test.pdf
與 PDF 書籤一起呈現,並且連結略微不合適。比應有的水平高出大約 50 個單位。使用jpdftweak
,我能夠輸出一個marks.csv
顯示書籤的文件,如下所示:1;O;Table of Contents;1 FitH 707.000061 1;O;Section 1;2 FitH 607.0 1;O;Section 2;2 FitH 565.040039 2;O;Subsection 2.1;2 FitH 524.08 2;O;Subsection 2.2;2 FitH 484.120026 1;O;Conclusion;2 FitH 443.160034
使用
awk
,我只能顯示最後一列:awk -F";" '{print $4}' marks.csv | awk -F" " '{print $3}'
甚至修改它以包含另一個具有更正 FitH 值的欄位,然後可以輸出到另一個文件:
awk -F";" '{print $4}' marks.csv | awk -F" " '{print $3","$3+50}' > dictionary.csv
導致
707.000061,757 607.0,657 565.040039,615.04 524.08,574.08 484.120026,534.12 443.160034,493.16
**注意:**我意識到將 50 添加到這樣的值會導致數字失去小數點,但這對我來說不是很重要,因為位置的物理變化非常小。我應該指出,我可以使用手動更改所有值
vim
,並且效果很好。我只是想用一個腳本(同樣,最好用awk
)來自動化它。因為
vim
可以讀取生成的pdfroff
PDF 並顯示所有輸出,所以我想用它awk
來搜尋dictionary.csv
PDF 中第一列中的數字並將其替換為第二列中的數字。pdf中的相關行都如下所示:<</D [23 0 R /FitH 565.040039]>>endobj
所以它
565.040039
出現了兩次:一次作為書籤值,一次作為連結值。該數字也出現在的第一列中,dictionary.csv
我想用第二個值(615.04``dictionary.csv
這樣做的最佳方法是什麼
awk
?
在現代 GNU Linux 上,您可以從 bash 提示符執行:
awk '{print $NF}' marks.csv | awk -F. '{print "s/"$0"/"($1+50)"."$2"/g"}' >replace.sed while read -rs f; do sed -f replace.sed "$f" >"$(sed 's/\.[pP][dD][fF]$//' <<<"$f")_adjust.pdf" done < <(/bin/ls *.[pP][dD][fF])