如何将awk结果输出到变量
how to output awk result to varial
我需要运行 hadoop 命令来列出所有活动节点,然后根据输出我使用 awk 命令重新格式化它,并最终将结果输出到一个变量,awk 每次调用时使用不同的分隔符它:
hadoop job -list-active-trackers | sort | awk -F. '{print }' | awk -F_ '{print }'
它输出这样的结果:
hadoop-dn-11
hadoop-dn-12
...
然后我把整个命令放在变量中逐行打印结果:
var=$(sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F "." '{print }' | awk -F "_" '{print }'")
printf %s "$var" | while IFS= read -r line
do
echo "$line"
done
awk -F 没有工作,输出结果为:
tracker_hadoop-dn-1.xx.xsy.interanl:localhost/127.0.0.1:9990
tracker_hadoop-dn-1.xx.xsy.interanl:localhost/127.0.0.1:9390
为什么带有 -F 的 awk 不能正常工作?我该如何解决?
var=$(sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F "." '{print }' | awk -F "_" '{print }'")
因为您将整个命令括在双引号中,所以您的 shell 在启动 sudo 之前扩展了变量 </code> 和 <code>
。这就是 sudo 命令的样子(我假设 $1 和 $2 是空的)
sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F . '{print }' | awk -F _ '{print }'"
因此,您会看到 awk 命令正在打印整行,而不仅仅是第一和第二个字段。
这只是一个引用挑战
var=$(sudo -H -u hadoop bash -c 'hadoop job -list-active-trackers | sort | awk -F "." '\''{print }'\'' | awk -F "_" '\''{print }'\')
A bash 单引号字符串不能包含单引号,所以这就是您看到 ...'\''...
的原因——关闭字符串,连接文字单引号,然后重新打开字符串。
另一种方法是转义变量和内部双引号:
var=$(sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F \".\" '{print $1}' | awk -F \"_\" '{print $2}'")
我需要运行 hadoop 命令来列出所有活动节点,然后根据输出我使用 awk 命令重新格式化它,并最终将结果输出到一个变量,awk 每次调用时使用不同的分隔符它:
hadoop job -list-active-trackers | sort | awk -F. '{print }' | awk -F_ '{print }'
它输出这样的结果:
hadoop-dn-11
hadoop-dn-12
...
然后我把整个命令放在变量中逐行打印结果:
var=$(sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F "." '{print }' | awk -F "_" '{print }'")
printf %s "$var" | while IFS= read -r line
do
echo "$line"
done
awk -F 没有工作,输出结果为:
tracker_hadoop-dn-1.xx.xsy.interanl:localhost/127.0.0.1:9990
tracker_hadoop-dn-1.xx.xsy.interanl:localhost/127.0.0.1:9390
为什么带有 -F 的 awk 不能正常工作?我该如何解决?
var=$(sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F "." '{print }' | awk -F "_" '{print }'")
因为您将整个命令括在双引号中,所以您的 shell 在启动 sudo 之前扩展了变量 </code> 和 <code>
。这就是 sudo 命令的样子(我假设 $1 和 $2 是空的)
sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F . '{print }' | awk -F _ '{print }'"
因此,您会看到 awk 命令正在打印整行,而不仅仅是第一和第二个字段。
这只是一个引用挑战
var=$(sudo -H -u hadoop bash -c 'hadoop job -list-active-trackers | sort | awk -F "." '\''{print }'\'' | awk -F "_" '\''{print }'\')
A bash 单引号字符串不能包含单引号,所以这就是您看到 ...'\''...
的原因——关闭字符串,连接文字单引号,然后重新打开字符串。
另一种方法是转义变量和内部双引号:
var=$(sudo -H -u hadoop bash -c "hadoop job -list-active-trackers | sort | awk -F \".\" '{print $1}' | awk -F \"_\" '{print $2}'")