我有一个文件,每行有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解
造成这种影响的原因是什么? (没有错误消息)。 还有另一种方法可靠吗?
答案 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