例如,我有一个如下文件。
A,Y29tLz9hPTQ2JmM9NDQzNzgmczE9Q0,123
B,FJNLTA2MjQyMDE3LVAmczI9ODQ3MDA,321
我想打印 field1,field2(通过 base 64 解码),field3
需要输出::
A,result of base 64 decode,123
B,result of base 64 decode,321
例如,我有一个如下文件。
A,Y29tLz9hPTQ2JmM9NDQzNzgmczE9Q0,123
B,FJNLTA2MjQyMDE3LVAmczI9ODQ3MDA,321
我想打印 field1,field2(通过 base 64 解码),field3
需要输出::
A,result of base 64 decode,123
B,result of base 64 decode,321
您可以在 bash 脚本中使用一些read
命令和base64 -D
:
#!/bin/bash
while read -r line
do
IFS=',' read -r c1 c2 c3 <<< "$line"
data="$(base64 -D <<< "$c2")"
echo "$c1,$data,$c3"
done < "inputfile.txt"
但是,您的一个 base64 字符串中包含二进制数据,因此由于控制字符,输出可能看起来很时髦。
A,com/?a=46&c=44378&s1=,123
���KL
�
�,321T �̏N
试试这个 awk 单线:
awk -F',' -v OFS=',' '"echo "$2" | base64" | getline $2' file
用你的例子测试:
kent$ cat f
A,Y29tLz9hPTQ2JmM9NDQzNzgmczE9Q0,123
B,FJNLTA2MjQyMDE3LVAmczI9ODQ3MDA,321
kent$ awk -F',' -v OFS=',' '"echo "$2" | base64" | getline $2' f
A,WTI5dEx6OWhQVFEySm1NOU5EUXpOemdtY3pFOVEwCg==,123
B,RkpOTFRBMk1qUXlNREUzTFZBbWN6STlPRFEzTURBCg==,321