Shell 使用awk和sed进行字符串处理和循环
我试图AWK一个文件,将两个列值成对解析,然后在循环中使用它们来检查特定应用程序相对于服务器的状态 文件的语法: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
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