Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用awk和sed进行字符串处理和循环_Shell_Unix_Awk_Sed - Fatal编程技术网

Shell 使用awk和sed进行字符串处理和循环

Shell 使用awk和sed进行字符串处理和循环,shell,unix,awk,sed,Shell,Unix,Awk,Sed,我试图AWK一个文件,将两个列值成对解析,然后在循环中使用它们来检查特定应用程序相对于服务器的状态 文件的语法: CELL **NAME_OF_CELL** MC **SERVERNAME.COM**/PORT_NUMBER 文件: 我对cell和servername.com的名称感兴趣,所以我的awk看起来像 sed '/^\s*$/d' $FILE |grep -v -e"#" -e"server" -e"gw_ps" | awk '{print $2" "$4}' | grep

我试图AWK一个文件,将两个列值成对解析,然后在循环中使用它们来检查特定应用程序相对于服务器的状态

文件的语法:

CELL **NAME_OF_CELL** MC **SERVERNAME.COM**/PORT_NUMBER 
文件:

我对cell和servername.com的名称感兴趣,所以我的awk看起来像

sed '/^\s*$/d' $FILE |grep -v -e"#" -e"server" -e"gw_ps" |  awk '{print $2"   "$4}' | grep -i -e"windows" -e"app" -e"smartphone"  > $DIRECTORY/CLEAN_FILE
CLEAN_文件的外观如下所述

server    unixhost2.test.com:3115
app_dynamics_21      dynamics21.xxxx.com/5021
windows_app     windows_app.app.com/5041
根据我的sed,我不应该在我的clean_文件中看到服务器,接下来我想读取每一行,并在一个变量中保存_单元格的NAME_,在另一个变量中保存SERVERNAME.COM,以验证应用程序和服务器的状态


需要SED和AWK的帮助才能从文件中提取CELL和SERVERNAME.COM的这些名称。

AWK可以做SED和grep可以做的事情,因此要将它们全部放在一个脚本中:

awk -v IGNORECASE=1 '
    /#/ || /server/ || /gw_ps/ {next}
    /windows/ || /app/ || /smartphone/ {print $2, $4}
' "$FILE" > clean_file

但是您可能希望
/^[:blank:][]*#/
删除注释,而不是盲目删除任何带有散列的行。

IGNORECASE变量是GNU awk扩展名
NF
的意义是什么?如果其中一个匹配,那么它肯定有一个字段?也是用gawk
'awk-vIGNORECASE=1编写它的另一种方法/(^#| server | gw|ps)/&&/(windows | app | smartphone)/{print$1,$2}'
@Jiddler,完全正确。我最初是用
NF
写的,后来我注意到问题中拖尾的grep,
server unixhost2.test.com:3115
来自干净的文件吗?
awk -v IGNORECASE=1 '
    /#/ || /server/ || /gw_ps/ {next}
    /windows/ || /app/ || /smartphone/ {print $2, $4}
' "$FILE" > clean_file