Linux如何选取一列内容,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 删除即可

标签:linuxprobe,test2,wc,多列,##,数据,linux,txt,root

来源: https://www.cnblogs.com/liujiaxin2018/p/13773427.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值