如何在Bash中用column命令查看CSV并滚动时保留表头?
在Bash环境下使用column命令查看CSV文件
基础用法
column是Bash环境里用来格式化文本为对齐表格的工具,针对CSV文件,核心参数如下:
-t:自动识别列数,生成对齐的表格格式-s ,:指定字段分隔符为逗号(CSV文件的默认分隔符)
最基础的查看命令:
column -t -s , file.csv
如果CSV内容较多,需要分页且避免行自动换行,可以结合less -S(-S让过长的行横向滚动,而非折行显示):
column -t -s , file.csv | less -S
实现滚动时表头始终跟随显示
直接通过column | less无法实现表头固定,因为less本身不支持固定表头的功能。以下是两种可行的解决方案:
方案1:原生工具实现近似效果(每页顶部重复表头)
通过awk分离表头和内容,格式化后在每N行重复显示表头(可根据终端高度调整行数):
awk -F, ' NR == 1 { header = $0; print header | "column -t -s ,"; # 生成表头分隔线 sep = gensub(/./, "-", "g", header); sep = gensub(/,/, "-", "g", sep); print sep | "column -t -s ,"; next; } # 每50行输出一次表头(可自行修改数字适配终端高度) NR % 50 == 0 { print ""; print header | "column -t -s ,"; print sep | "column -t -s ,"; } { print $0 | "column -t -s ," } ' file.csv | less -S
方案2:用终端复用工具实现真正的固定表头
如果你的环境安装了tmux,可以通过分屏让表头固定在顶部,内容在下方自由滚动:
# 启动tmux会话(未启动时执行) tmux new-session -d -s csv_view # 分屏,上屏显示格式化后的表头 tmux split-window -v -l 1 tmux send-keys "head -n1 file.csv | column -t -s ," C-m # 下屏显示格式化后的内容并进入less滚动 tmux select-pane -t 0 tmux send-keys "tail -n+2 file.csv | column -t -s , | less -S" C-m # 接入会话查看 tmux attach-session -t csv_view
内容的提问来源于stack exchange,提问作者gst1502
相关产品推荐
相关产品推荐

