base64从文件列解码

问题描述:

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

我试图通过

awk的-F做这个 ''“{ “回声 ”$ 6“ |的base64 - 二| gunzip解” |函数getline X;打印$ 3,X} 'OFS =',” inputfile.csv> outptfile_decoded.csv

用于第一线的结果是OK,但是一些行之后的译码输出相同的行前。这似乎解码& hungs,但我没有得到错误信息。

辛格解码/解压缩工作正常,即

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

这可能是什么原因造成的? (没有错误信息)。 有没有另一种工作可靠的方法?

+0

检查行结束,如果复制从文件Windows环境下执行'dos2unix' – karakfa

没有测试案例很难推荐任何东西。下面是输入数据的工作脚本

创建一个测试数据文件

$ 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 
+0

我执行一个5000个测试文件,运行时解码我总是得到'1019,1019 awk:(FILENAME = file.g FNR = 1020)fatal:无法打开管道'echo H4sIAJ1zuVkAAzM0MDLgAgCZcDSyBQAAAA == | base64 -di | gunzip'(打开的文件太多)' –

+0

当我用我自己的输入文件(其中包括287000行,解码条目有最多95个符号)进行测试时'我没有错误消息,但是具有与我在开始时描述的相同的效果question' –