base64从文件列解码

时间:2017-09-13 13:39:30

标签: awk base64 getline

我有一个文件,每行有6列用“,”分隔。最后一列是压缩的,并以base 64编码。输出文件应为第3列和第6列(解码/解压缩)。

我试图通过

来做到这一点
  

awk -F',''{“echo”$ 6“| base64 -di | gunzip”| getline x; print $ 3,x}'OFS =','inputfile.csv> outptfile_decoded.csv

第一行的结果是可以的,但在某些行之后,解码输出与之前的行相同。似乎解码&解压缩挂起,但我没有收到错误消息。

单个解码/解压缩工作正常,即

  回声“H4sIAAAAAAAAA7NJTkuxs0lMLrEztNEHUTZAgcy8tHw7m7zSXLuS1BwrbRNjMzMTc3MDAzMDG32QqE1uSWVBqh2QB2HYlCYX2xnb6IMoG324ASCWHQAaafi1YQAAAA ==”| base64 -di | gunzip解

造成这种影响的原因是什么? (没有错误消息)。 还有另一种方法可靠吗?

1 个答案:

答案 0 :(得分:0)

没有测试用例很难推荐任何东西。这是一个带有输入数据的工作脚本

  

创建测试数据文件

$ while read f; do echo $f,$(echo $f | gzip -f | base64); done < <(seq 5) | tee file.g
1,H4sIAJhBuVkAAzPkAgBT/FFnAgAAAA==
2,H4sIAJhBuVkAAzPiAgCQr3xMAgAAAA==
3,H4sIAJhBuVkAAzPmAgDRnmdVAgAAAA==
4,H4sIAJhBuVkAAzPhAgAWCCYaAgAAAA==
5,H4sIAJhBuVkAAzPlAgBXOT0DAgAAAA==
  

并解码

$ awk 'BEGIN {FS=OFS=","} 
             {cmd="echo "$2" | base64 -di | gunzip"; cmd | getline v; print $1,v}' file.g
1,1
2,2
3,3
4,4
5,5