在Bash中编辑文件

fix*_*ift 1 bash awk

我有一些包含IP地址的文件.我正在创建一个脚本,并且必须弄清楚如何创建一个新的用户文件,其IP地址基于之前创建的文件.如果最后一个文件包含IP ABCD,则新文件需要为ABC(D + 4).

我想我需要使用'sed'和'awk'命令,但是无法正常工作.我将如何编写脚本的这一部分?

sam*_*hen 6

这里有一些东西让你开始:假设有一个名为inputlook 的文件:

输入:内容input

127.0.0.1
127.0.0.2
127.0.0.3
127.0.0.200
Run Code Online (Sandbox Code Playgroud)

你可以在cmdline上做:

awk 'BEGIN{FS=OFS="."} {$4=$4+4; print}' input > output
Run Code Online (Sandbox Code Playgroud)

关于在这里做什么的解释:

  • awk '...' - 调用awk,一种主要用于逐行操作文件的工具,单引号括起来的东西是awk的指令.
  • BEGIN{FS=OFS="."}- 告诉awk .用作输入和输出的分隔符​​.FS代表"现场分隔符"
  • {$4=$4+4; print}- $4表示第4场.由于.是分隔符,D对应于第4个字段,我们将整数值添加4到第4个字段.这print是打印整条生产线的捷径.
  • input - 将输入文件命名为awk的参数; 拯救一只猫
  • > output - 将输出重定向到文件,以便在根据它创建用户文件之前检查它们是否存在任何问题.

输出:内容output

127.0.0.5
127.0.0.6
127.0.0.7
127.0.0.204
Run Code Online (Sandbox Code Playgroud)

然后,您可以output根据需要一次读取一行来创建新的用户文件,也许是另一个脚本,其中包含以下内容:

while read line
do
    echo "this is a user file" > "$line"
done < output
Run Code Online (Sandbox Code Playgroud)

(并根据您的需要调整)

最后,只要您了解上面的内容,您就可以output完全跳过该文件,只需在一行中完成:

awk 'BEGIN{FS=OFS="."} {$4=$4+4; print}' input | while read line; do echo "hello world" > "$line"; done
Run Code Online (Sandbox Code Playgroud)