Linux   发布时间:2022-05-08  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么(g)awk反转这些输出线?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
所以,我看到这个输出,我有点惊讶:

$echo "a,b,c,d,e,f,g" | cut -d,-f-4
a,d
$echo "a,-f6-
f,g
echo "a,g" | awk '{ print $0 | "cut -d,-f-4"; print $0 | "cut -d,-f6-"; }'
f,g
a,d

(作为旁注,我意识到在awk中这是一件非常愚蠢的事情,但这是我见过它的唯一命令!).

据我了解,这应该将记录分为两个命令 – 按顺序.但由于某种原因,输出看起来相反.如果我这样做

$echo "a,g" | awk '{ print $0 | "echo Hello"; print $0 | "echo goodbye"; }'
Hello
goodbye

然后一切都按照我的预期顺序进行.我认为这肯定是某种竞争条件,但我很惊讶awk不等待管道中的子命令完成.这是一个使用awk或者某些东西来使用gawk的已知问题吗?有没有办法避免这样的陷阱?

编辑:

我也尝试使用mawk ……相同(反转)的结果,似乎两者都是一致的.

解决方法

为了确保完成外部命令,您必须执行 close命令.

$echo "a,g" | awk 'BEGIN {CR_934_11845@d1 = "cut -d,-f-4"; cmd2 = "cut -d,-f6-"} { print $0 | cmd1; close(cmd1); print $0 | cmd2; close(cmd2)}'
a,d
f,g

大佬总结

以上是大佬教程为你收集整理的为什么(g)awk反转这些输出线?全部内容,希望文章能够帮你解决为什么(g)awk反转这些输出线?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:bcdef所以