【问题标题】:Set an awk,sed output to a variable in Bash将 awk,sed 输出设置为 Bash 中的变量
【发布时间】:2017-10-09 09:15:35
【问题描述】:

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

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

【问题讨论】:

    标签: linux bash shell awk sed


    【解决方案1】:

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

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

    【讨论】:

    • 您好 Roman,感谢您的帮助!我不知道这是否可以解决我的问题。此 awk 命令的输出与源文件相同;打印符合 if... 条件的所有 IP(第一列的)对我来说会很有趣。
    • @Dandelion,很明显:您的条件if [ $portLocal &lt; 3200 ] || [ $ipForeign != 127.0.0.1 ] || [ $ipForeign != 192.168.1.1 ] 涵盖了您的所有输入行,即您当前的所有输入行都符合您的条件。否则,你在定义条件时犯了一个错误
    • 好的!我知道了。但是使用您的 awk 命令,即使使用“ : ”分隔符,我也会不断得到不正确的输出。我还尝试获取一个新文件,首先将所有内容分开:例如 127.0.0.1 25 127.0.0.1 (第一列是本地地址 IP,第二列是本地端口,第三列是外部 IP),但我仍然没有'没有得到我想要的 IP 列表,(我在新文件上看到的只是 IP 列表和端口,就像原始文件一样)。
    • @Dandelion :与其在 cmets 中进行长时间的更正,不如用您对问题的(新)最佳理解来更新您的 Q,然后说“请参阅上面 Q 中的更新”。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2020-12-19
    • 1970-01-01
    • 2019-06-13
    • 2021-08-22
    • 2011-06-06
    相关资源
    最近更新 更多