在Bash中粘贴文件时如何对齐行并按字母排序?
在粘贴文件内容为列时对齐行并按字母排序的方法
要实现将多列内容按字母顺序统一对齐,让相同词汇出现在同一行、缺失位置留空的效果,可以按以下步骤操作:
核心思路
先提取所有列的唯一词汇并按字母排序,以此作为全局行基准;再针对每一列,对照基准列表填充内容(存在的词汇保留,缺失的留空);最后合并列并对齐格式。
具体实现命令
# 定义各列的原始内容 col1="bike car lane road wheel" col2="car rollers wheel" col3="bike lane tire wheel" # 生成全局排序后的唯一词汇列表 all_words=$(printf '%s\n' $col1 $col2 $col3 | sort -u) # 处理每一列并合并对齐 paste \ <(printf '%s\n' "$all_words" | while read w; do grep -qx "$w" <(printf '%s\n' $col1) && echo "$w" || echo; done) \ <(printf '%s\n' "$all_words" | while read w; do grep -qx "$w" <(printf '%s\n' $col2) && echo "$w" || echo; done) \ <(printf '%s\n' "$all_words" | while read w; do grep -qx "$w" <(printf '%s\n' $col3) && echo "$w" || echo; done) | column -s $'\t' -t
命令解释
all_words:收集所有列的内容,通过sort -u去重并按字母排序,得到所有需要展示的行基准。- 每个
<()中的循环:遍历基准列表,用grep -qx检查当前词汇是否在对应列中,存在则输出词汇,否则输出空行。 paste:将三个处理后的列按行合并。column -s $'\t' -t:以制表符为分隔符,自动对齐所有列的格式。
运行结果
bike bike car car lane lane road rollers tire wheel wheel wheel
内容的提问来源于stack exchange,提问作者LEo
相关产品推荐
相关产品推荐

