在 for 循环中使用 awk 的 Bash 脚本

标签 bash awk

for i in $LIST
do
  CFG=`ssh $i "cat log.txt|awk '{print $2}'"`
  for j in $CFG
  do
    echo $j
  done
done

假设我想在一对远程主机上打印日志文件中的第二个字段。在上面的脚本中,print $2 不起作用。我怎样才能解决这个问题?谢谢。

最佳答案

根据 shell 扩展的数量和引用的类型,需要多个反斜杠转义:

awk '{ print $2 }' log.txt # none
ssh $server "awk '{ print \$2 }' log.txt" # one
CFG=`ssh $server "awk '{ print \\$2 }' log.txt"` # two
CFG=$(ssh $server "awk '{ print \$2 }' log.txt") # one (!) 

作为一个技巧,您可以在美元符号和两者之间放置一个空格,以防止所有 $ 扩展。 Awk 仍会将其粘合在一起:

  CFG=`ssh $i "cat log.txt|awk '{print $ 2}'"`

关于在 for 循环中使用 awk 的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3835128/

相关文章:

linux - 将变量的内容写入文件

linux - awk 不打印所需的 df 输出

bash - 生成特殊文件列表

python - 使用 Shell 脚本从 python 获取返回值

json - bash脚本将多个json文件合并成一个json

Linux Dialog 包参数插入 for/while 循环?

bash - 从 cron 作业创建空的 catalina.out(基于刚刚删除的 catalina.out)

linux - 在 if 语句中使用退出状态的 Bash 脚本

string - 如何在unix中剪切特定字符后的字符串

bash - grep (awk) 从 A 到第一个空行的文件