把用tab/空格 分割表示的文本转为json 脚本

比如如下文本:

Timestamp                               : Sat Nov 16 18:28:46 2024 
Driver Version                          : 560.35.03 
CUDA Version                            : 12.560.35.03 
Attached GPUs                           : 3 
N/A                                     Product Name                        : NVIDIA H100 PCIe Product Brand                       : NVIDIA Product Architecture                : HOPPER compute_capability                  : 9.0 max resident grids per device       : 128 max resident blocks per sm          : 32 max resident warps per sm           : 64 Display Mode                        : Enabled Display Active                      : Disabled Persistence Mode                    : Enabled Addressing Mode   ..

我想转为json,

{
"Timestamp": "Sat_Nov_16_18:28:46_2024",
"Driver_Version": "560.35.03",
"CUDA_Version": "12.560.35.03",
"Attached_GPUs": "3",
"N/A": {
"Product_Name": "NVIDIA_H100_PCIe",
"Product_Brand": "NVIDIA",
"Product_Architecture": "HOPPER",
"compute_capability": "9.0",
"max_resident_grids_per_device": "128",
"max_resident_blocks_per_sm": "32",
"max_resident_warps_per_sm": "64",
"Display_Mode": "Enabled",
...
}
}

如下是脚本

#!/bin/bashinput_file="h100.txt"
output_file="output.json"indent=0stack=()
push() {stack+=("$1")
}
pop() {if [ ${#stack[@]} -eq 0 ]; thenecho "empty"elseunset 'stack[${#stack[@]}-1]'fi
}
peek() {if [ ${#stack[@]} -eq 0 ]; thenecho "empty"elseecho "${stack[${#stack[@]}-1]}"fi
}count_leading_whitespace() {local line="$1"local count=0while [[ "${line:$count:1}" == " " ]]; do((count++))doneecho $count
}last_key=""echo "{" > $output_filewhile IFS= read -r line; do# Skip empty linesif [[ -z "$line" ]]; thencontinuefiwhitespace_count=$(count_leading_whitespace "$line")last_line_whitespace_count=$(peek)if [ $last_line_whitespace_count == "empty" ]; then# push $whitespace_countlast_line_whitespace_count=$(peek)fiecho "whitespace_count: $whitespace_count"echo "last_line_whitespace_count: $last_line_whitespace_count"# Remove leading spaces and replace spaces between words with underscoresline=$(echo "$line" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]\+/_/g')echo "Line: $line"if [[ $whitespace_count -eq $last_line_whitespace_count ]]; thenif [[ "$line" =~ : ]]; thenkey=$(echo "$line" | cut -d: -f1  | sed 's/_$//g')value=$(echo "$line" | cut -d: -f2- | sed 's/^ *//' | sed 's/^_//g' | sed 's/_$//g')printf "\"%s\": \"%s\",\n" "$key" "$value" >> $output_fileelselast_key=$(echo "$line" | cut -d: -f1  | sed 's/_$//g')echo "Last key: $last_key"fiecho "first stage"elif [[ $whitespace_count -gt $last_line_whitespace_count ]]; thenpush $whitespace_countpushed=1echo "send stage, last key: $last_key"key=$(echo "$line" | cut -d: -f1  | sed 's/_$//g')value=$(echo "$line" | cut -d: -f2- | sed 's/^ *//' | sed 's/^_//g' | sed 's/_$//g')if [[ -n "$last_key" ]]; thenprintf "\"%s\": {\n" "$last_key" >> $output_filelast_key=""elsepopfiprintf "\"%s\": \"%s\",\n" "$key" "$value" >> $output_filelast_key=""echo "send stage"elif [[ $whitespace_count -lt $last_line_whitespace_count ]]; thenlast_key=$(echo "$line" | cut -d: -f1  | sed 's/_$//g')echo "Last key: $last_key"sed -i '$ s/,$//' $output_fileprintf "},\n"  >> $output_filepopfidone < "$input_file"while [[ ${#stack[@]} -gt 0 ]]; dosed -i '$ s/,$//' $output_fileprintf "}\n" >> $output_filepop
donesed -i '$ s/,$//' $output_file
printf "}\n" >> $output_file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/63116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见Linux命令(详解)

文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…

C语言:数组长度与数组排序

1、数组长度 在实际编程中&#xff0c;有时数组的长度不能提前确定&#xff0c;如果这个变化范围小&#xff0c;那么使用常量表达式定义一个足够大的数组就可以&#xff0c;如果这个变化范围很大&#xff0c;就可能会浪费内存&#xff0c;这时就可以使用变长数组。请看下面的代…

前端热门面试题目——React、Node

img 标签的 srcset 属性的作用 srcset 属性允许开发者为不同设备或分辨率提供多个图像选项&#xff0c;优化加载的图片以适应设备的屏幕大小和分辨率。这提高了性能和用户体验。 示例&#xff1a; <img src"default.jpg" srcset"small.jpg 480w, medium.j…

数据结构初阶1 时间复杂度和空间复杂度

本章重点 算法效率时间复杂度空间复杂度常见时间复杂度以及复杂度OJ练习 1.算法效率 1.1 如何衡量一个算法的好坏 如何衡量一个算法的好坏呢&#xff1f;比如对于以下斐波那契数列&#xff1a; long long Fib(int N) { if(N < 3) return 1;return Fib(N-1) Fib(N-2); }斐…

计算机网络复习4——网络层

两种服务之争 路由器在网络层、数据链路层、物理层 网际协议IP IP解决了异构网络互联问题 网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。 #网络层四个协议 网际协议IP ( Internet Protocol) 地址解析协议ARP(Address Resolution Protocol) 网际控制报文协议ICMP(…

【C语言】数学挑战(小Z和跳跳棋)

相信你是最棒哒&#xff01;&#xff01;&#xff01; 文章目录 一、重礼仪的贪心小Z 题目代码 二、跳跳棋 题目代码&#xff1a; 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可仅供参考 一、重礼仪的贪心小Z 问题描述 小Z最近在研究一种倒酒礼仪“步步…

qt QPrinter详解

1、概述 QPrinter类是Qt框架中用于打印输出的绘图设备。它表示打印出来的一系列页面&#xff0c;并提供了一组附加功能来管理特定于设备的特性&#xff0c;比如方向和分辨率。QPrinter可以生成PDF文档&#xff0c;也可以将内容发送到打印机进行实际打印。它继承自QPagedPaintD…

FPGA实战篇(按键控制LDE实验)

1.按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。我们的开发板上有两种按键开关&#xff1a;第一种是本实验所使用的轻触式按键开关&#xff0c;简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff…

2023年华数杯数学建模B题不透明制品最优配色方案设计解题全过程文档及程序

2023年华数杯全国大学生数学建模 B题 不透明制品最优配色方案设计 原题再现&#xff1a; 日常生活中五彩缤纷的不透明有色制品是由着色剂染色而成。因此&#xff0c;不透明制品的配色对其外观美观度和市场竞争力起着重要作用。然而&#xff0c;传统的人工配色存在一定的局限性…

大数据:新型生产要素与数字经济发展的强劲引擎

大数据&#xff1a;新型生产要素与数字经济发展的强劲引擎 随着信息技术的飞速发展&#xff0c;大数据已经成为一种全新的生产要素&#xff0c;与土地、劳动力、资本和技术并驾齐驱&#xff0c;共同推动数字经济的发展。这一变革不仅重塑了经济格局&#xff0c;更为诸如十堰市…

PortSwigger 原型污染

一、什么是原型污染 原型污染是一种 JavaScript 漏洞&#xff0c;它使攻击者能够向全局对象原型添加任意属性&#xff0c;然后这些属性可能被用户定义的对象继承。 二、JavaScript 原型和继承基础 1、原型 JavaScript 中的每个对象都链接到某种类型的另一个对象&#xff0c;称…

【实战攻略】如何从零开始快速实现深度学习新想法?——四步走战略

标题 【实战攻略】如何从零开始快速实现深度学习新想法&#xff1f;——四步走战略 【核心结论】 通过四步走战略&#xff0c;即找到baseline论文、深入baseline代码、搭建自己的pipeline、融入核心算法&#xff0c;新手也能快速实现深度学习新想法。 【通俗解释&#xff0…

Qml之基本控件

一.Qml常用控件 1.Text(显示普通文本和富文本) 1.1显示普通文本&#xff1a; Window { visible: true width: 320 height: 240 title: qsTr("Hello World") Text { text: "Hello World!" font.family: "Helvetica" font.pointSize: 24 color:…

威联通-004 安装photoview相册应用Docker镜像

文章目录 前言准备MariaDB 10phpMyAdminphotoview 安装步骤1.安装MariaDB 10和phpMyAdmin2.初始安装MariaDB 103.进入phpMyAdmin添加账户4.手动下载photoview的Docker库注意&#xff1a;安装 phpMyAdmin 报错5.配置photoview6.容器安装成功之后进入photoview注意&#xff1a;这…

ScratchLLMStepByStep:一步一步构建大语言模型教程

前言 在学习大语言模型的时候&#xff0c;总会遇到各种各样的名词&#xff0c;像自注意力、多头、因果、自回归、掩码、残差连接、归一化等等。这些名词会让学习者听的云里雾里&#xff0c;觉得门槛太高而放弃。 本教程将会带你从零开始&#xff0c;一步一步的去构建每一个组…

6.824/6.5840 Lab 1: MapReduce

宁静的夏天 天空中繁星点点 心里头有些思念 思念着你的脸 ——宁夏 完整代码见&#xff1a; https://github.com/SnowLegend-star/6.824 由于这个lab整体难度实在不小&#xff0c;故考虑再三还是决定留下代码仅供参考 6.824的强度早有耳闻&#xff0c;我终于也是到了挑战这座高…

学习threejs,使用CubeCamera相机创建反光效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️CubeCamera 立方体相机 二、…

支持向量机(SVM)的解析与应用:从封闭解到时代演变 (中英双语)

中文版 支持向量机&#xff08;SVM&#xff09;的解析与应用&#xff1a;从封闭解到时代演变 什么是支持向量机&#xff08;SVM&#xff09;&#xff1f; 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种经典的监督学习算法&#xff0c;用于解决分类和…

HTML5系列(5)-- SVG 集成详解

前端技术探索系列&#xff1a;HTML5 SVG 集成详解 &#x1f3a8; 开篇寄语 &#x1f44b; 前端开发者们&#xff0c; 在前五篇文章中&#xff0c;我们探讨了 HTML5 的多个特性。今天&#xff0c;让我们深入了解 SVG 的魅力&#xff0c;看看如何创建可缩放的矢量图形。 一、…

变点问题的公式推导

背景与关键定义 变点检测问题 变点检测的目标是在给定的观测序列 y 1 , y 2 , … , y T y_1, y_2, \dots, y_T y1​,y2​,…,yT​ 中&#xff0c;找到一个或多个点&#xff08;变点&#xff09;&#xff0c;使得每段子序列&#xff08;即变点划分的区间&#xff09;能被一个较…