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
这可能是什么原因造成的? (没有错误信息)。 有没有另一种工作可靠的方法?
没有测试案例很难推荐任何东西。下面是输入数据的工作脚本
创建一个测试数据文件
$ 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
我执行一个5000个测试文件,运行时解码我总是得到'1019,1019 awk:(FILENAME = file.g FNR = 1020)fatal:无法打开管道'echo H4sIAJ1zuVkAAzM0MDLgAgCZcDSyBQAAAA == | base64 -di | gunzip'(打开的文件太多)' –
当我用我自己的输入文件(其中包括287000行,解码条目有最多95个符号)进行测试时'我没有错误消息,但是具有与我在开始时描述的相同的效果question' –
检查行结束,如果复制从文件Windows环境下执行'dos2unix' – karakfa