首页 > 解决方案 > 在 shell 脚本/Python 中进行 Base 64 解码和解析字符串

问题描述

我已经输入了这样的 csv 文件,我想对 clientid 列的字符串进行 base64 解码。解码后我想解析数据并将数据以以下格式放置在输出中

ip,clientid,device
3.3.3.3,W3sNCiAgIm5hbWUiIDogImpzb24taWQiLA0KICAidmFsdWUiIDogIjEyMyINCn0sIHsNCiAgIm5hbWUiIDogIm5hbWUtaWQiLA0KICAidmFsdWUiIDogIjY3OCINCn0gXQ==,iPhone
7.7.7.7,W3sNCiAgIm5hbWUiIDogImpzb24taWQiLA0KICAidmFsdWUiIDogIjEyMyINCn0sIHsNCiAgIm5hbWUiIDogIm5hbWUtaWQiLA0KICAidmFsdWUiIDogIjY3OCINCn0gXQ==,Samsung

我想要在 csv 中的输出是

ip,clientid,device
3.3.3.3,json-id||123##name-id||678,iPhone
7.7.7.7,json-id||657##name-id||234,Samsung

我想单独使用shell脚本来做。像这样提取数据。但不知道如何解析shell脚本中的数据。

#!/bin/bash
awk -v FPAT='[^,]*|"[^"]+"' '{printf "%s", $1","substr($2,1,9999)","substr($3,1,15)}' input.csv >output.csv
echo "W3sNCiAgIm5hbWUiIDogImpzb24taWQiLA0KICAidmFsdWUiIDogIjEyMyINCn0sIHsNCiAgIm5hbWUiIDogIm5hbWUtaWQiLA0KICAidmFsdWUiIDogIjY3OCINCn0gXQ==" | base64 --decode

另一种选择是我可以处理 output.csv 并编写一个 python 脚本来获取 clientid 列的数据,然后解析并重写到文件。
如果可能的话,我们是否还可以确保在解析“name”键时应该有 name_id 或 json_id 然后我们才解析出这些值?

有人可以建议吗

标签: pythonpython-3.xbashshell

解决方案


请您尝试以下方法:

while IFS=, read -r ip clientid device; do
    if (( nr++ )); then
        clientid=$(base64 -d <<< "$clientid" | jq -r '.[] | "\(.name)||\(.value)"' | awk 'ORS="##"' | sed 's/##$//')
    fi
    echo "$ip,$clientid,$device"
done < file.csv

输出:

ip,clientid,device
3.3.3.3,json-id||123##name-id||678,iPhone
7.7.7.7,json-id||123##name-id||678,Samsung

推荐阅读