我有一个带有书签的.txt文件,所有超过100的书签都要从现在的位置往下放2页,因为我在文档中加了两页。我如何写一个bash脚本,在文档中找到的所有整数都加2?
我是个写代码的新手,但我已经知道我应该做一个for循环来读取每一行,然后确定每个字是否是一个整数,然后用if语句给每一个超过100的整数加2。
问题是,我不知道如何访问(读和写)文件,也不知道如何确定某个字是否是数字。
下面是 是指向.txt文件的链接。一个小样本。
The Tortle Package; 24
Tortle; 25
Elemental Evil Player's Companion; 27
Aarakocra; 28
Deep Gnome (gnome subrace); 30
Eberron\: Rising from the Last War; 84
Changelings; 85
Gnomes; 91
Goblinoids; 92
Bugbear; 93
Goblin; 94
Hobgoblin; 94
Half-Elves; 94
我做了一些研究,这是我得出的代码。
#!/bin/bash
cd /home/dexterdy/Documents/
i=$(grep -ho '[0-9]*' bookmarks.txt)
if [ "$i" -gt 100 ]; then
i += 2
fi
似乎grep变量输出的是一个大字符串,里面有所有的数字. 由于某些原因,我也不能让if语句工作,我不知道如何将数字实际写入文件。
从你输入文件的形状来看,我建议用下面的魔术。
awk 'BEGIN{FS=OFS=";"}($NF>100){$NF+=2}1' input_file > output_file
这样就可以去掉文件后面的空格 ;
,可以在做的时候进行回退。
awk 'BEGIN{FS=OFS=";"}($NF>100){$NF=" "($NF+2)}1' input_file > output_file
如果你想确保格式错误的行,如
foo;20
bar\; car;105
都正确地转换为
foo; 20
bar\; car; 107
你必须这样做。
awk 'BEGIN{FS=OFS=";"}{$NF=" "($NF+($NF>100?2:0))}1' input_file > output_file