如何在bash的.txt文件中对所有大于100的整数加2?

问题描述 投票:0回答:1

我有一个带有书签的.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语句工作,我不知道如何将数字实际写入文件。

bash for-loop if-statement integer text-files
1个回答
2
投票

从你输入文件的形状来看,我建议用下面的魔术。

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
© www.soinside.com 2019 - 2024. All rights reserved.