【发布时间】:2017-03-19 10:25:44
【问题描述】:
我需要将出现在图书索引中的所有数字加上 22。索引数据如下所示(例如):
Ubuntu, 120, 143, 154
Yggdrasil, 144, 170-171
Yood, Charles, 6
Young, Bob, 178-179
Zawinski, Jamie, 204
我正在尝试使用此脚本通过 awk 执行此操作:
#!/bin/bash
filename="index"
while read -r line
do
echo $line | awk -v n=22 '{printf($1)}{printf(" " )}{for(i=2;i<=NF;i++)printf(i%2?$i+n:$i+n)", "};{print FS}'
done < "$filename"
它接近工作,但有以下问题:
- 它不适用于属于某个范围的页码(例如“170-171”)而不是单个数字。
- 对于索引词超过一个词的条目(例如,“X Windows”和“Young, Bob”),输出仅显示词中的第一个词。第二个单词最终输出为数字 22。(我知道为什么会这样——我的 awk 命令将 $2 视为一个数字,如果它是一个字符串,它假定它的值为 0)但我想不通解决方法。
披露:我绝不是 awk 专家。我只是在寻找一种快速的方法来修改我的索引中的页码(几天后到期),因为我的出版商决定在我准备好索引之后更改手稿中的页码。 awk 对我来说似乎是完成这项工作的最佳工具,但如果有人有更好的想法,我愿意接受其他建议。基本上,我只需要一种方式来表示“取此文件中的所有数字并将其加 22;不要更改任何其他内容。”
【问题讨论】: