linux系统中如何将多列数据转化为一列数据
1、利用xargs命令将多列数据转化为一列数据
[root@linuxprobe test2]# echo "1 2 3 4 5 6" > a.txt
[root@linuxprobe test2]# cat a.txt
1 2 3 4 5 6
[root@linuxprobe test2]# cat a.txt | xargs -n 1 ## 直接加参数 -n 1 即可
1
2
3
4
5
6
[root@linuxprobe test2]# seq 10000 | tr "\n" " " | sed 's/$/\n/' > b.txt ## 测试单行多列
[root@linuxprobe test2]# wc -l b.txt ## 1行
1 b.txt
[root@linuxprobe test2]# awk '{print NF}' b.txt ##10000列
10000
[root@linuxprobe test2]# time xargs -n 1 < b.txt | wc -l
10000
real 0m5.752s
user 0m2.685s
sys 0m3.608s
[root@linuxprobe test2]# seq 50000 | tr "\n" " " | sed 's/$/\n/' > b.txt
[root@linuxprobe test2]# wc -l b.txt
1 b.txt
[root@linuxprobe test2]# awk '{print NF}' b.txt
50000
[root@linuxprobe test2]# time xargs -n 1 < b.txt | wc -l
50000
real 0m28.813s
user 0m13.534s
sys 0m18.066s
[root@linuxprobe test2]# seq 100000 | tr "\n" " " | sed 's/$/\n/' > b.txt
[root@linuxprobe test2]# wc -l b.txt
1 b.txt
[root@linuxprobe test2]# awk '{print NF}' b.txt
100000
[root@linuxprobe test2]# time xargs -n 1 < b.txt | wc -l ## 比较耗时
100000
real 0m56.833s
user 0m26.998s
sys 0m35.685s
[root@linuxprobe test2]# seq 10000 | tr "\n" " " | sed 's/$/\n/' > b.txt ## 测试数据多行多列的情况
[root@linuxprobe test2]# wc -l b.txt
1 b.txt
[root@linuxprobe test2]# awk '{print NF}' b.txt
10000
[root@linuxprobe test2]# cat b.txt b.txt > c.txt
[root@linuxprobe test2]# wc -l c.txt
2 c.txt
[root@linuxprobe test2]# awk '{print NF}' c.txt
10000
10000
[root@linuxprobe test2]# time xargs -n 1 < c.txt | wc -l ## 耗时随行数增加,近似翻倍
20000
real 0m11.407s
user 0m5.317s
sys 0m7.290s
[root@linuxprobe test2]# seq 100000 | tr "\n" " " | sed 's/$/\n/' > b.txt
[root@linuxprobe test2]# wc -l b.txt
1 b.txt
[root@linuxprobe test2]# awk '{print NF}' b.txt
100000
[root@linuxprobe test2]# cat b.txt b.txt > c.txt
[root@linuxprobe test2]# wc -l c.txt
2 c.txt
[root@linuxprobe test2]# awk '{print NF}' c.txt
100000
100000
[root@linuxprobe test2]# time xargs -n 1 < c.txt | wc -l ## 比较耗时
200000
real 1m54.300s
user 0m53.625s
sys 1m12.667s
2、利用sed命令将多列数据转化为一列
[root@linuxprobe test2]# echo "1 2 3 4 5 6" > a.txt
[root@linuxprobe test2]# cat a.txt
1 2 3 4 5 6
[root@linuxprobe test2]# sed 's/ /\n/g' a.txt ## 将空格替换为换行符,g表示全局
1
2
3
4
5
6
[root@linuxprobe test2]# seq 10000 | tr "\n" " " | sed 's/$/\n/' > a.txt ## 测试多列的情况
[root@linuxprobe test2]# wc -l a.txt ; awk '{print NF}' a.txt
1 a.txt
10000
[root@linuxprobe test2]# time sed 's/ /\n/g' a.txt | wc -l ## 10000列,快
10001
real 0m0.003s
user 0m0.002s
sys 0m0.002s
[root@linuxprobe test2]# seq 100000 | tr "\n" " " | sed 's/$/\n/' > a.txt
[root@linuxprobe test2]# wc -l a.txt ; awk '{print NF}' a.txt
1 a.txt
100000
[root@linuxprobe test2]# time sed 's/ /\n/g' a.txt | wc -l ## 100000列,快
100001
real 0m0.014s
user 0m0.011s
sys 0m0.004s
[root@linuxprobe test2]# cat a.txt a.txt > b.txt
[root@linuxprobe test2]# wc -l b.txt ; awk '{print NF}' b.txt ## 测试多行多列的情况
2 b.txt
100000
100000
[root@linuxprobe test2]# time sed 's/ /\n/g' b.txt | wc -l ## 100000列2行,速度快
200002
real 0m0.026s
user 0m0.025s
sys 0m0.002s
[root@linuxprobe test2]# cat a.txt a.txt a.txt a.txt a.txt > b.txt
[root@linuxprobe test2]# wc -l b.txt ; awk '{print NF}' b.txt
5 b.txt
100000
100000
100000
100000
100000
[root@linuxprobe test2]# time sed 's/ /\n/g' b.txt | wc -l ##100000列5行,速度快
500005
real 0m0.059s
user 0m0.054s
sys 0m0.007s
### 每替换一行,行数多出1,末行为空行,sed '/^[\t ]*$/d' file 删除即可
3、利用tr将多列转换为一列
[root@linuxprobe test2]# echo "1 2 3 4 5 6" > a.txt
[root@linuxprobe test2]# ls
a.txt
[root@linuxprobe test2]# cat a.txt
1 2 3 4 5 6
[root@linuxprobe test2]# cat a.txt | tr " " "\n" ##直接替换
1
2
3
4
5
6
[root@linuxprobe test2]# seq 100000 | tr "\n" " " | sed 's/$/\n/' > a.txt ## 测试1行100000列
[root@linuxprobe test2]# wc -l a.txt
1 a.txt
[root@linuxprobe test2]# awk '{print NF}' a.txt
100000
[root@linuxprobe test2]# time tr " " "\n" < a.txt | wc -l ## 快
100001
real 0m0.002s
user 0m0.003s
sys 0m0.000s
[root@linuxprobe test2]# seq 1000000 | tr "\n" " " | sed 's/$/\n/' > a.txt ## 1000000列
[root@linuxprobe test2]# wc -l a.txt
1 a.txt
[root@linuxprobe test2]# awk '{print NF}' a.txt
1000000
[root@linuxprobe test2]# time tr " " "\n" < a.txt | wc -l ##快
1000001
real 0m0.009s
user 0m0.005s
sys 0m0.005s
[root@linuxprobe test2]# cat a.txt a.txt a.txt a.txt a.txt > b.txt ## 测试5行1000000列
[root@linuxprobe test2]# wc -l a.txt
1 a.txt
[root@linuxprobe test2]# cat a.txt a.txt a.txt a.txt a.txt > b.txt
[root@linuxprobe test2]# wc -l b.txt
5 b.txt
[root@linuxprobe test2]# awk '{print NF}' b.txt
1000000
1000000
1000000
1000000
1000000
[root@linuxprobe test2]# time tr " " "\n" < b.txt | wc -l ##快
5000005
real 0m0.030s
user 0m0.028s
sys 0m0.030s
4、利用awk将多列转换为1列
[root@linuxprobe test2]# echo "1 2 3 4 5 6" > a.txt
[root@linuxprobe test2]# cat a.txt
1 2 3 4 5 6
[root@linuxprobe test2]# awk '{gsub(" ","\n");print}' a.txt
1
2
3
4
5
6
[root@linuxprobe test2]# seq 100000 | tr "\n" " " | sed 's/$/\n/' > a.txt ##测试多列的情况
[root@linuxprobe test2]# wc -l a.txt ;awk '{print NF}' a.txt
1 a.txt
100000
[root@linuxprobe test2]# time awk '{gsub(" ","\n");print}' a.txt | wc -l ##快
100001
real 0m0.014s
user 0m0.013s
sys 0m0.002s
[root@linuxprobe test2]# seq 1000000 | tr "\n" " " | sed 's/$/\n/' > a.txt
[root@linuxprobe test2]# wc -l a.txt ;awk '{print NF}' a.txt
1 a.txt
1000000
[root@linuxprobe test2]# time awk '{gsub(" ","\n");print}' a.txt | wc -l ##快
1000001
real 0m0.123s
user 0m0.117s
sys 0m0.011s
[root@linuxprobe test2]# cat a.txt a.txt a.txt a.txt a.txt > b.txt ##测试多行多列
[root@linuxprobe test2]# wc -l b.txt ;awk '{print NF}' b.txt
5 b.txt
1000000
1000000
1000000
1000000
1000000
[root@linuxprobe test2]# time awk '{gsub(" ","\n");print}' b.txt | wc -l ## 快
5000005
real 0m0.586s
user 0m0.579s
sys 0m0.031s
### 每替换一行,行数多出1,末行为空行,sed '/^[\t ]*$/d' file 删除即可
分类:
linux shell
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律