encoding - 有没有办法在 Shell 中使用 base64 对 csv 中的多个列进行编码?
问题描述
我需要用它的 base64 编码值替换 csv 文件的多个列,该值应该应用于文件的某些列,但第一行不受影响,因为第一行包含文件的标题。我已经尝试了如下的 1 列,但是因为我在跳过文件的第一行后让它继续,所以它不是
gawk 'BEGIN { FS="|"; OFS="|" } NR >=2 { cmd="echo "$4" | base64 -w 0";cmd | getline x;close(cmd); print $1,$2,$3,x}' awktest
o/p:
12|A|B|Qw==
13|C|D|RQ==
36|Z|V|VQ==
问:它没有在输出中显示标题。我应该怎么做才能在输出中生成标题?我也可以在这里使用任何循环来替换多列吗?
输入:
10|A|B|C|5|T|R
12|A|B|C|6|eee|ff
13|C|D|E|9|dr|xrdd
36|Z|V|U|7|xc|xd
所需输出:
10|A|B|C|5|T|R
12|A|B|encodedvalue|6|encodedvalue|ff
13|C|D|encodedvalue|9|encodedvalue|xrdd
36|Z|V|encodedvalue|7|encodedvalue|xd
这可能吗?研究了很多,但找不到合适的解释。我是壳牌新手。请帮忙。非常感谢!!!!
解决方案
看起来你可以只对条件进行排序。这可能不是解决标题问题的最佳方法,但它很直观。
BEGIN { FS="|"; OFS="|" } NR ==1 {print} NR >=2 { cmd="echo "$4" | base64 -w 0";cmd | getline x;close(cmd); print $1,$2,$3,x}
至于使用循环来影响多列...... bash 中的循环很难。awk 在技术上是它自己的语言,并且可能有它自己的循环结构,IDK。但不清楚你是否需要一个循环。如果只有合理数量的字段需要修改,您可以通过字段索引(以某种方式)参数化现有命令,然后通过管道传递它的许多实例。它不会像在一次 awk 中完成所有操作那样高效,但这可能没关系。
推荐阅读
- r - 为什么在 R 中使用 deparse 时输出中会出现 \?
- android - 在 Android Navigation Architecture 中,如何获取之前的片段名称?
- javascript - 悬停时更改 div 中的本地图像
- java - 运行应用程序的问题;显示一些错误信息
- c++ - 自定义向量/动态数组 C++ 问题
- key - json键中的分数使jq失败
- c++ - 为什么在我的打印函数中使用 do-while 循环时会出现无限循环
- flutter - 在 Flutter Row 中,有没有办法在使用 MainAxisAlignment.spaceBetween 时使孩子居中对齐?
- java - 并行化反序列化步骤
- 3d - F90 从非恒定分辨率 3D 网格到恒定分辨率网格的插值