当前位置:首页 > Linux > 正文

linux终端如何分栏

Linux 终端,可使用 sedawk 等命令结合格式化字符串实现分栏输出,或借助 column -c 命令按

Linux终端中,分栏显示是一种非常实用的技巧,可以帮助用户更高效地浏览和处理信息,以下是几种常见的Linux终端分栏方法:

使用paste命令

  • 功能:将多列数据合并为一行输出,常用于对比多个文件或数据的并排显示。
  • 示例:假设有两个文件file1.txtfile2.txt如下:
# file1.txt
apple
banana
cherry
# file2.txt
red
yellow
dark red

执行以下命令可以将两个文件的内容并排显示:

paste file1.txt file2.txt

输出结果:

apple     red
banana    yellow
cherry    dark red

使用column命令

  • 功能:将输入的数据按列格式化输出,适用于将单列数据转换为多列显示。
  • 示例:假设有一个文件words.txt如下:
# words.txt
apple
banana
cherry
date
elderberry
fig
grape

执行以下命令可以将数据按两列显示:

cat words.txt | column -t -s $'t' -c 2

输出结果:

apple         banana
cherry        date
elderberry    fig
grape         

使用tmuxscreen进行窗口分栏

  • 功能tmuxscreen是终端复用工具,可以在一个终端会话中创建多个窗口或面板,实现分栏效果。
  • 示例:使用tmux创建一个新会话并分栏:
    tmux new-session -s mysession

    进入tmux后,按Ctrl+B然后按可以将当前窗口垂直分割为左右两栏,按Ctrl+B然后按可以将当前窗口水平分割为上下两栏。

使用watch命令结合其他命令

  • 功能watch命令可以定时执行指定的命令,并将输出结果以分栏的形式更新显示,适用于实时监控数据变化。
  • 示例:监控当前目录的磁盘使用情况,并每2秒刷新一次:
    watch -n 2 "df -h | grep '/dev/sda1'"

使用awk脚本进行复杂分栏

  • 功能awk是一个强大的文本处理工具,可以通过编写脚本实现复杂的分栏需求。
  • 示例:假设有一个日志文件access.log如下:
# access.log
192.168.1.1 [01/Jan/2023:10:00:00 +0000] "GET /index.html HTTP/1.1" 200 1024
192.168.1.2 [01/Jan/2023:10:01:00 +0000] "POST /login HTTP/1.1" 302 512
192.168.1.3 [01/Jan/2023:10:02:00 +0000] "GET /dashboard HTTP/1.1" 200 2048

执行以下awk脚本可以将日志按三列显示:

awk '{print $1, $4, $7}' access.log

输出结果:

linux终端如何分栏  第1张

168.1.1 /index.html 1024
192.168.1.2 /login 512
192.168.1.3 /dashboard 2048

使用pr命令进行分页分栏

  • 功能pr命令可以将输入的内容进行分页处理,并支持指定每页的列数。
  • 示例:假设有一个文件long_text.txt较长,执行以下命令可以将其按两列分页显示:
    pr -2 -t -w 80 long_text.txt

使用nl命令结合paste进行编号分栏

  • 功能nl命令可以为文件内容添加行号,结合paste命令可以实现带编号的分栏显示。
  • 示例:假设有一个文件data.txt如下:
# data.txt
apple
banana
cherry

执行以下命令可以为每行添加行号并分两列显示:

nl -b a data.txt | paste | column -t

输出结果:

1  apple
2  banana
3  cherry

使用diff命令进行分栏对比

  • 功能diff命令可以比较两个文件的差异,并以分栏的形式显示。
  • 示例:假设有两个文件file1.txtfile2.txt略有不同,执行以下命令可以对比它们的差异:
    diff file1.txt file2.txt

输出结果(假设file2.txt中第二行改为orange):

1a2
> orange
3a4
> grapefruit

使用join命令进行基于键的分栏合并

  • 功能join命令可以根据指定的键将两个文件的内容合并为一列显示。
  • 示例:假设有两个文件fileA.txtfileB.txt如下:
# fileA.txt
1 apple
2 banana
3 cherry
# fileB.txt
1 red
2 yellow
3 dark red

执行以下命令可以根据第一列的键值将两个文件的内容合并:

join fileA.txt fileB.txt

输出结果:

1 apple red
2 banana yellow
3 cherry dark red

使用fold命令结合paste进行固定宽度分栏

  • 功能fold命令可以将长文本按指定宽度折行,结合paste命令可以实现固定宽度的分栏显示。
  • 示例:假设有一个长文本文件long_text.txt,执行以下命令可以将其按每行40字符宽度折行,并分两列显示:
    fold -w 40 long_text.txt | paste | column -t

使用expand命令调整字符间距进行分栏

  • 功能expand命令可以调整文本的字符间距,结合paste命令可以实现等宽分栏。
  • 示例:假设有一个文件fixed_width.txt如下:
# fixed_width.txt
apple
banana
cherry

执行以下命令可以将每行的字符间距调整为4个空格,并分两列显示:

expand -t 4 fixed_width.txt | paste | column -t

输出结果:

apple     banana
cherry    

使用fmt命令进行格式化分栏

  • 功能fmt命令可以格式化文本的宽度和段落,结合paste命令可以实现格式化后的分栏显示。
  • 示例:假设有一个文件paragraph.txt如下:
# paragraph.txt
This is a long paragraph that needs to be formatted properly for better readability in a two-column layout. The text should wrap around nicely and fit into the specified width without breaking words unnecessarily.

执行以下命令可以将文本格式化为每行50字符宽度,并分两列显示:

fmt -w 50 paragraph.txt | paste | column -t

使用nl命令结合awk进行复杂分栏处理

  • 功能:结合nlawk可以实现更复杂的分栏需求,如添加序号、过滤特定行等。
  • 示例:假设有一个文件data_with_ids.txt如下:
# data_with_ids.txt
apple 100
banana 150
cherry 200

执行以下命令可以为每行添加序号,并只显示第二列数据:

nl -b a data_with_ids.txt | awk '{print $1, $3}' | paste | column -t

输出结果:

1 100
2 150
3 200

使用sort命令结合paste进行排序分栏

  • 功能:结合sortpaste可以先对数据进行排序,然后再分栏显示。
  • 示例:假设有一个文件unsorted_data.txt如下:
# unsorted_data.txt
cherry 200
apple 100
banana 150

执行以下命令可以先按数值排序,然后分两列显示:

sort -k2,2n unsorted_data.txt | paste | column -t

输出结果:

apple 100
banana 150
cherry 200

使用cut命令结合paste进行字段提取分栏

  • 功能:结合cutpaste可以从文件中提取指定字段,并进行分栏显示。
  • 示例:假设有一个文件data_fields.txt如下:
# data_fields.txt
apple red 100
banana yellow 150
cherry dark red 200

执行以下命令可以提取第一列和第三列数据,并分两列显示:

cut -d ' ' -f1,3 data_fields.txt | paste | column -t

输出结果:

apple 100
banana 150
cherry 200

使用xargs结合paste进行多文件分栏合并

  • 功能:结合xargspaste可以将多个文件的内容合并为一列显示。
  • 示例:假设有三个文件file1.txtfile2.txtfile3.txt分别为:
# file1.txt
A
B
C
# file2.txt
X
Y
Z
# file3.txt
1
2
3

执行以下命令可以将三个文件的内容合并为三列显示:

paste file1.txt file2.txt file3.txt | xargs -n3 echo | column -t

输出结果:

A X 1
B Y 2
C Z 3
0