AWK中的多个管道

  • 本文关键字:管道 AWK awk pipeline
  • 更新时间 :
  • 英文 :


我想做这样的事情:

'{ 
var = "value";
"echo -n "$var"|"xxd -r -p"|"sha256sum"|"cut -d " " -f 1"|getline var;
}'

我想在awk中我不能以这种方式使用piplines,那么如何在awk中将其实现呢?

'{ 
var = "value"
cmd = "echo -n 47" var "47 | xxd -r -p | sha256sum | cut -d " " -f 1"
var = ( (cmd | getline line) > 0 ? line : "Failed: " var )
close(cmd)
print var
}'

但是,这不太可能是做任何你想做的事情的最佳方式。我将var设置为"Failed: " var。如果到getline的管道失败,你必须决定如何处理它。请参阅http://awk.freeshell.org/AllAboutGetline关于何时/如何使用getline,还有许多注意事项。

测试并确认在mawkgawknawk上工作

=

<( … input_from_/dev/stdin … )> |
mawk '
function ______(__,_) {
1     _ = "47"
1     gsub(_, "&\" (_)_,__)
1     return (_)(__)_
}
function _______(__,_,___) {
1     return 
substr( (___ = RS)*(RS = "n"), 
(_=" printf 47%s47 " (______(__))" | xxd -p " 
" | xxd -p -r | xxh128sum | awk NF=1") | getline __, 

close(_)*_*(RS = ___))__
}
{
1     print $+(_="")
1     printf("n xxhash-128-from-_INPUT_ :: ")
1     printf("%s", $-_) | (__="xxh128sum ")
1                    close(__)
1     _ = _______($-_)
1     print "n xxhash-128-from-getline "
":: getline :: [[ "(_)" ]]n" } '

---这是一行,但为了可读性而重新格式化了

The quick brown fox !"#$%&'()*+,-./0123456789:;<=>
?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnop
qrstuvwxyz{|}~jumps over the lazy !"#$%&'()*+,-./0
123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`ab
cdefghijklmnopqrstuvwxyz{|}~dog
xxhash-128-from-_INPUT_ :: 5a43bf3eab449ca21b817f0baeee2a4b  stdin
xxhash-128-from-getline :: getline :: [[ 5a43bf3eab449ca21b817f0baeee2a4b ]]

最新更新