使用bash,根据偶数或奇数将服务器分成单独的文件

时间:2014-12-02 02:10:40

标签: bash

输出来自我从我们的netscaler运行的命令。它输出以下内容......需要注意的是,中间两个数字会改变,但偶数/奇数标准总是在最后一个数字上。我们永远不会超过2位数,所以我们永远不会达到10。

WC-01-WEB1
WC-01-WEB4
WC-01-WEB3
WC-01-WEB5
WC-01-WEB8

我需要填充一个名为“even”和“odds”的文件。如果我们正在处理数字,我可以弄明白,但在字符串中输入数字会让我失望。

示例代码,但我错过了我需要匹配字符串的部分。

if [ $even_servers -eq 0 ] 
then
    echo $line >> evenfile 
else
    echo $line >> oddfile
fi

3 个答案:

答案 0 :(得分:1)

这是一个简单的awk命令:

awk '/[02468]$/{print > "evenfile"}; /[13579]$/{print > "oddfile"}' input.txt

必须有更好的方法。

答案 1 :(得分:1)

这个版本怎么样:

for v in `cat <my_file>`; do export type=`echo $v | awk -F 'WEB' '{print $2%2}'`; if [ $type -eq 0 ]; then echo $v >> evenfile ; else echo $v >> oddfile; fi; done

我假设您的服务器列表存储在文件名<my_file>中。基本思路是使用WEBawk进行标记,并在WEB之后处理字符以确定均匀性。知道后,我们export变量type的值,并使用它来选择性地转储到相应的文件。

对于名称是另一个命令的输出的情况:

export var=`<another command>`; export type=`echo $var | awk -F 'WEB' '{print $2%2}'`; if [ $type -eq 0 ]; then echo $var >> evenfile ; else echo $var >> oddfile; fi;

<another command>替换为perl脚本。

答案 2 :(得分:0)

总是grep是你的朋友:

grep "[2468]$" input_file > evenfile
grep "[^2468]$" input_file > oddfile

我希望这会有所帮助。