gpt4 book ai didi

linux - 将 awk,sed 输出设置为 Bash 中的变量

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:42 24 4
gpt4 key购买 nike

更新:现在我有一个更简单的文件要处理,类似于:

127.0.0.1 25 127.0.0.1
127.0.0.1 25 127.0.0.1
127.0.0.1 32828 127.0.0.1
127.0.0.1 32830 127.0.0.1
127.0.0.1 32906 127.0.0.1
127.0.0.1 32908 127.0.0.1
127.0.0.1 32984 127.0.0.1

(第一列 ip_local,第二列 port_local,最后一列 ip_foreign)

我所要做的就是将 awk 输出发送到一个变量。我设法写的代码是这样的,但是我在处理文本文件时仍然有问题......

#!/bin/sh
for i in `cat DEV0_IPsListSep.txt`;
do
ip_local=$(awk '{print $1}' $i);
port_local=$(awk '{print $2}' $i);
ip_foreign=$(awk '{print $3}' $i);
if [$port_local < 3200] || [$ip_foreign != 127.0.0.1] || [$ip_foreign !=
192.168.1.1]
then
echo $ip_foreign >> IPFinalList.txt;
fi
done

我有一个处理包含两列的文件的 bash 脚本。第一列是本地 ip 地址,另一列是外国地址。

例子:

127.0.0.1:25 127.0.0.1:33862
127.0.0.1:25 127.0.0.1:36498
127.0.0.1:25 127.0.0.1:37338
127.0.0.1:25 127.0.0.1:37410
127.0.0.1:25 127.0.0.1:38320
127.0.0.1:25 127.0.0.1:39428
127.0.0.1:25 127.0.0.1:39514
127.0.0.1:25 127.0.0.1:39768
127.0.0.1:25 127.0.0.1:39846
127.0.0.1:25 127.0.0.1:40376

我希望脚本将 sed 和 awk 命令的输出分配给我的自定义变量,以分隔 IP 和端口。

我尝试创建一个脚本,但仍然收到语法错误...

#!/bin/sh

for i in `IPslist.txt`;

ipLocal=$(awk '{print $1}' | sed -e 's/:.*//' $i)
portLocal=$(awk '{print $1}' | sed -e 's/.*://' $i)
ipForeign=$(awk '{print $2}' | sed -e 's/:.*//' $i)
portForeign=$(awk '{print $2}' | sed -e 's/.*://' $i)

if [ $portLocal < 3200 ] || [ $ipForeign != 127.0.0.1 ] || [
$ipForeign != 192.168.1.1 ]

then

echo $ipForeign >> IPFinalList.txt

fi

最佳答案

使用单个awk进程(优化方案):

awk -F':|[[:space:]]+' '$2<3200 || $3!= 127.0.0.1 || $3!= 192.168.1.1' IPslist.txt > IPFinalList.txt

关于linux - 将 awk,sed 输出设置为 Bash 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46642802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com