【问题标题】:base64 decoding from file column从文件列进行base64解码
【发布时间】:2018-02-22 06:14:28
【问题描述】:

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

我尝试这样做

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

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

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

回显“H4sIAAAAAAAAAA7NJTkuxs0lMLrEztNEHUTZAgcy8tHw7m7zSXLuS1BwrbRNjMzMTc3MDAzMDG32QqE1uSWVBqh2QB2HYlCYX2xnb6IMoG324ASCWHQAaafi1YQAAAA==”| base64 -di |压缩包

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

【问题讨论】:

  • 检查你的行尾,如果从 Windows 环境复制文件,请执行 dos2unix

标签: awk base64 getline


【解决方案1】:

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

创建一个测试数据文件

$ 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: cannot open pipe echo H4sIAJ1zuVkAAzM0MDLgAgCZcDSyBQAAAA== | base64 -di | gunzip'(打开的文件太多)`
  • 当我用自己的输入文件(which includes 287000 lines, decoded entries have max 95 signs) 测试它时,我没有收到错误消息,但有same effects as discribed in my starting question
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2011-12-29
  • 1970-01-01
  • 2022-07-04
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
相关资源
最近更新 更多