Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
zcat clit_lg_2026/*.gz | head -n 10000 | jq .event | sort | uniq -c

jq 是一个轻量级的json处理命令。可以对json数据进行分片、过滤、映射和转换

jq . 对json数据进行格式化输出

常用选项

  • -c 紧凑输出json数据
  • -s 读取所有输入到一个数组
  • -r 输出原始字符串,而不是一个JSON格式
  • -S 排序对象

1、紧凑输出json数据

jq -c . test.json
[{"lon":113.30765,"name":"广州市","code":"4401","lat":23.422825},{"lon":113.59446,"name":"韶关市","code":"4402","lat":24.80296}]

2、读取所有输出到一个数组(也就是所在json数据最外层套一个数组)

echo '{"safd":"fsafd"}'
{"safd":"fsafd"}
echo '{"safd":"fsafd"}' | jq -r .
{
  "safd": "fsafd"
}
echo '{"safd":"fsafd"}' | jq -s .
[
  {
    "safd": "fsafd"
  }
]

3、输出原始字符串,而不是一个JSON格式

echo '{"safd":"fsafd"}' | jq  .[]
"fsafd"
echo '{"safd":"fsafd"}' | jq -r .[]
fsafd

4、排序对象

jq . test.json 
[
  {
    "lon": 113.30765,
    "name": "广州市",
    "code": "4401",
    "lat": 23.422825
  },
  {
    "lon": 113.59446,
    "name": "韶关市",
    "code": "4402",
    "lat": 24.80296
  }
]
jq -S . test.json 
[
  {
    "code": "4401",
    "lat": 23.422825,
    "lon": 113.30765,
    "name": "广州市"
  },
  {
    "code": "4402",
    "lat": 24.80296,
    "lon": 113.59446,
    "name": "韶关市"
  }
]

5、获取上面地理json数据里的name值

jq '.[]|{name}' test.json 
{
  "name": "广州市"
}
{
  "name": "韶关市"
}

6、获取第一个name值

jq '.[0]|{name}' test.json 
{
  "name": "广州市"
}

7、只打印出第一个map的值:

jq '.[0]|.[]' test.json 
113.30765
"广州市"
"4401"
23.422825

8、打印出一个map的name值

jq '.[0]|.name' test.json 
"广州市"

9、打印出一个map的name值并用普通字符串显示

jq -r '.[0]|.name' test.json 
广州市

案例

测试json数据,如下:

{
    "name": "xueyuan",
    "age": 21,
    "birthday": "10th August",
    "email": "im.hexueyuan@outlook.com",
    "skills" : [
        "C/C++",
        "Python",
        "Golang",
        "Node.js"
    ]
}

使用python的json库把它处理为一个字符串,如下:

{"skills": ["C/C++", "Python", "Golang", "Node.js"], "age": 21, "birthday": "10th August", "name": "xueyuan", "email": "im.hexueyuan@outlook.com"}

这个格式是我们在实际生产中经常看到的格式,比如我们使用curl请求一个接口,返回了一个json,比如我们在自己的项目中测试输出了一个json数据,这种格式往往可读性较差,我们需要进行处理后才能查看。

要转换成python处理前的那一种易读形式很简单,执行:

cat test.json | jq '.'
#也可以写作 cat json2.data | jq .
#不加引号,但是为了标准最好写上,因为某些时候不加会有问题.

jq把数据转换成易读格式,还添加了颜色高亮说明,其中key和value使用了不同的颜色。

{
  "skills": [
    "C/C++",
    "Python",
    "Golang",
    "Node.js"
  ],
  "age": 21,
  "birthday": "10th August",
  "name": "xueyuan",
  "email": "im.hexueyuan@outlook.com"
}

如果json数据很大,我们只想看其中某个字段数据,那么使用如下语法:

#key是字段名称
jq '.<key>'
cat test.json | jq .skills
[
  "C/C++",
  "Python",
  "Golang",
  "Node.js"
]
cat test.json | jq .name
"xueyuan"

当某个字段是一个列表,jq可以对其进行切片

jq '.<list-key>[s:e]'
cat test.json | jq '.skills[0]'
"C/C++"
cat test.json | jq '.skills[0:3]'
[
  "C/C++",
  "Python",
  "Golang"
]
cat test.json | jq '.skills[:3]'
[
  "C/C++",
  "Python",
  "Golang"
]
cat test.json | jq '.skills[:]'
jq: error: syntax error, unexpected ']' (Unix shell quoting issues?) at <top-level>, line 1:
.skills[:]
jq: 1 compile error
cat test.json | jq '.skills[2:]'
[
  "Golang",
  "Node.js"
]
cat test.json | jq '.skills[]'
"C/C++"
"Python"
"Golang"
"Node.js"

注意和python列表切片方式进行区分。区别一下’.skills’和’.skills[]'两种,可以看到前者输出是一个列表,后者是非json格式的列表成员。

用法详解

jq从linux管道或者文件中获取文本输入,如果文本不满足json格式,那么jq会报错,可以用这个方法来检查一个文本是否满足json检查:

jq '.' json_file > /dev/null

jq使用filter来处理json文本,并输出filter处理后的内容到标准输出,filter是用来过滤满足需求的字段的,比如最简单的filter ‘.’,这个表示无过滤策略,因此会输出全部json文本。

key filter

'.<key>'

过滤满足key的字段名,输出这个key的值。

key-value filter

'<key>'

输出key和value,区别key filter,如下

cat test.json | jq '{age}'
{
  "age": 21
}
cat test.json | jq '.age'
21

因为key-value必须归属于某个对象,所以添加外层{}。

index filter

'.<list-key>[index]'
'.<list-key>[index1, index2]'
'.<list-key>[s:e]'
'.<list-key>[:e]'
'.<list-key>[s:]'
'.<list-key>[]'

数组索引和切片,用来操作列表元素。

嵌套层级filter

'.key1.key2.key3'

用于嵌套的json数据filter。

多个filter

'.key1, .key2, .key3'

使用英文单字节逗号分隔filter,用于在一个filter中过滤多个字段。

filter管道

'filter1 | filter2 | filter3'
jq '.contact | .phone | .home' people.json

由于大部分filter之后,输出仍然是一个json数据,所以可以将filter通过管道连接。

重新组织filter后输出的数据

有时候我们需要重新构造json的结构,比如去掉某一层嵌套,比如取某几个字段组成一个新的json,这时候我们需要重新改变json的结构,我们可以使用[]和{}来重新组织json。

#把输出组织成一个列表
jq '[filter1, filter2, filter3]' data.json
cat test.json | jq '[.age,.name]'
[
  21,
  "xueyuan"
]
#把输出组织为新的json对象
jq '{filter1, filter2, filter3}' data.json
cat test.json | jq '{age,name,email,skills: .skills[2:]}'
{
  "age": 21,
  "name": "xueyuan",
  "email": "im.hexueyuan@outlook.com",
  "skills": [
    "Golang",
    "Node.js"
  ]
}

递归展开json结构

有时候我们需要在一个json里边查找某个字段,但是确不知道这个字段在哪个嵌套里边,如果嵌套很深那么很难找到,jq可以把嵌套展开打平之后再查找。

#展开嵌套
jq '..' data.json
cat test.json | jq '..'
{
  "skills": [
    "C/C++",
    "Python",
    "Golang",
    "Node.js"
  ],
  "age": 21,
  "birthday": "10th August",
  "name": "xueyuan",
  "email": "im.hexueyuan@outlook.com"
}
[
  "C/C++",
  "Python",
  "Golang",
  "Node.js"
]
"C/C++"
"Python"
"Golang"
"Node.js"
21
"10th August"
"xueyuan"
"im.hexueyuan@outlook.com"

展开之后结合管道再次filter可以查找key。

length filter

计算元素长度,对于对象,length表示对象里的元素个数,对于string,length表示string字符数,对于列表,表示列表元素个数。

cat test.json | jq '. | length'
5
cat test.json | jq '.age | length'
21
cat test.json | jq '.name | length'
7
cat test.json | jq '.skills | length'
4

keys filter

输出全部的key,列表形式

cat test.json | jq '. | keys'
[
  "age",
  "birthday",
  "email",
  "name",
  "skills"
]

检查某个key是否存在

如果输入是一个对象,那么对象的元素是以"key-value"形式存在的,使用

jq 'has("key-name")' data.json

检查json对象是否含有某个key。

列表遍历

jq支持使用map()或者map_values()遍历列表,或者对象的值。

echo '{"a":1,"b":2,"c":3}' | jq 'map_values(1 + .)'
{
  "a": 2,
  "b": 3,
  "c": 4
}
echo '[1,2,3]' | jq 'map(1 + .)'
[
  2,
  3,
  4
]

删除某个key

jq 'del(filter)' json.data

使用del()删除filter描述的key-value。

jq支持管道线 |,它如同linux命令中的管道线——把前面命令的输出当作是后面命令的输入。

二、vim

退出编辑模式:按esc键

命令行模式下相关命令

1.移动光标

  • h: ← 左移
  • l: → 右移
  • j: ↓ 下移
  • k: ↑ 上移
  • gg: 光标移动文件开头
  • G: 光标移动到文件末尾
  • ^: 光标移动到行头
  • 0: 光标移动到行首
  • $: 光标移动到行尾
  • 123G:跳转到第123行

2.删除字符

  • x: 删除光标后一个字符,相当于 Del
  • X: 删除光标前一个字符,相当于 Backspace
  • dd: 删除光标所在行
  • n dd 删除光标(含)后多少行

3.撤销操作

  • u: 撤销上一步
  • Ctr-r: 反撤销

4.复制粘贴

  • yy: 复制光标当前行,n yy 复制光标所在行(含)后多少行
  • p: 在光标所在位置向下新开辟一行,粘贴
  • P: 从光标所在行, 开始粘贴

5.可视模式

  • v:按字移动
  • 配合 h、j、k、l 使用
  • 使用y复制选中内容

6.查找操作

  • /hello -> 从光标所在位置向后查找 hello
  • n: 下一个
  • N:上一个
  • ?hello -> 从光标所在位置向前查找 hello
  • n: 上一个
  • N:下一个

7.替换操作

  • r: 替换当前字符

8.文本行移动

  • >>: 文本行右移
  • <<: 文本行左移

9.Man Page

  • 光标移动到函数上,Shift-k 光标移动到函数上

文本模式下相关命令

1. 进入输入模式

  • i: 插入光标前一个字符
  • I: 插入行首
  • a: 插入光标后一个字符
  • A: 插入行未
  • o: 向下新开一行,插入行首
  • O: 向上新开一行,插入行首
  • s: 删除光标所在的字符
  • S:删除当前行

末行模式下相关命令

1.行跳转

  • :123 -> 跳转到第123行

2.替换

(1) 替换一行

  • : s/abc/123
  • -> 将当前行中的第一个abc替换为123
  • : s/abc/123/g
  • ->将当前行中的abc全部替换为123

(2) 替换全部

  • :%s/abc/123
  • -> 将所有行中的第一个abc替换为123
  • :%s/abc/123/g
  • -> 将所有行中的abc全部替换为123

(3)替换指定行

  • :10,30s/abc/123/g
  • -> 将10-30行中的abc全部替换为123

3.执行shell命令

  • 末行模式里输入!,后面跟命令

4.分屏操作

(1) 进入分屏模式

  • 命令:sp 将屏幕分为两部分 --> 水平
  • 命令:vsp 将屏幕分为两部分 --> 垂直
  • 命令:sp(vsp) + 文件名 水平或垂直拆分窗口显示两个不同的文件

(2) 退出分屏模式

  • 命令:wqall 保存并退出所有屏幕
  • 命令:wq保存并退出光标所在的屏幕
  • Ctrl+ww 切换两个屏幕

在一般模式当中,输入『 : / ?』3 个中的任何一个按钮,就可以将光标移动到最底下那一行。

在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等动作是在此模式中达成的!

  • :w 保存
  • :q 退出
  • :! 强制执行
  • :set nu 显示行号
  • :set nonu 关闭行号
  • ZZ(shift+zz) 没有修改文件直接退出,如果修改了文件保存退出
  • :nohl 去除高亮显示
  • :wq! 强制保存退出


1698845047765.jpg

1698845054519.jpg

参考:https://blog.csdn.net/Cheat1173010256/article/details/118230562

三、LInux集群安装miniconda并配置虚拟环境

1.下载软件

wget -c https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

2.安装

sh Miniconda3-latest-Linux-x86_64.sh

3.激活

source ./miniconda3/bin/activate

4.添加频道

conda config --add channels bioconda
conda config --add channels conda-forge

5.添加镜像(清华源)

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda config --set show_channel_urls yes

6.查看

conda config --get channels
or
cat ~/.condarc

7.环境管理

查看已安装的python环境

conda info -e  #conda info --envs
conda env list
#当前环境会通过一个星号 (*) 标识

创建环境

#基于python3.6版本创建一个名字为test的python独立环境
conda create --name test python=3.7 
#指定python3版本
conda create -n test2 python=3
#指定环境路径
conda create --prefix=/path/to/py37 python=3.7 #注-p/--prefix和-n/--name参数不能同时用
#如果不指定python,安装会默认为conda自带的python版本,即如果是conda3,就是python3.
#最好是每个环境指定python,尤其是和自己使用的保持一致

启动或关闭环境

#激活环境
source activate(后接环境名,不加默认为base)
source activate test
#退出环境
source deactivate test
#PS:若未加入环境变量,需进入conda的bin目录下执行

删除环境

conda env remove -n test
conda remove -n test --all

重命名环境

即先克隆,再删除

conda create -n python2 --clone py2
conda remove -n py2 --all

关闭环境

conda deactivate
相关文章
|
1天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
5天前
|
Linux Python
Linux 安装python3.7.6
本教程介绍在Linux系统上安装Python 3.7.6的步骤。首先使用`yum`安装依赖环境,包括zlib、openssl等开发库。接着通过`wget`下载Python 3.7.6源码包并解压。创建目标文件夹`/usr/local/python3`后,进入解压目录执行配置、编译和安装命令。最后设置软链接,使`python3`和`pip3`命令生效。
|
8天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
75 20
|
1天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
39 7
|
8天前
|
Unix Linux 编译器
UNIX/Linux 上的安装
UNIX/Linux 上的安装。
26 2
|
27天前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
61 4
|
1月前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
68 9
|
1月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
50 5
|
1月前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
75 2