在 Linux 粘贴命令中对齐输出

在 Linux 粘贴命令中对齐输出

无论第一个文件中的行长度如何,如何使粘贴中的第二个文件在同一位置开始?例如:

file1:
small
incredibly humungous

file 2:
A
B

我想粘贴 file1 file2 来输出:

small                        A
incredibly humungous         B

代替:

small                        A
incredibly humungous                        B

答案1

我们可以使用column命令 withtab作为分隔符。

paste file1 file2 | column -s $'\t' -t

small                 A
incredibly humungous  B

答案2

paste在粘贴文件的内容之间插入制表符。我们可以使用它来解析结果awk并使用自定义格式打印列printf

下面输出中的管道字符仅用于装饰。

右对齐 25+5 个字符:

$ paste file1 file2 | awk -F '\t' '{ printf("|%25s|%5s|\n", $1, $2) }'
|                    small|    A|
|     incredibly humungous|    B|

左对齐 25+5 个字符:

$ paste file1 file2 | awk -F '\t' '{ printf("|%-25s|%-5s|\n", $1, $2) }'
|small                    |A    |
|incredibly humungous     |B    |

第一列太短,左对齐 5+5 个字符:

$ paste file1 file2 | awk -F '\t' '{ printf("|%-5s|%-5s|\n", $1, $2) }'
|small|A    |
|incredibly humungous|B    |

第一列太短,数据被截断,左对齐 5+5 个字符:

$ paste file1 file2 | awk -F '\t' '{ printf("|%-5.5s|%-5s|\n", $1, $2) }'
|small|A    |
|incre|B    |

file1计算出and中最长的行file2并将其用作调用中的字段宽度printf()

$ paste file1 file2 | awk -F '\t' -v len=$( awk -F '\t' 'length > m { m = length } END { print m }' file1 file2 ) '{ printf("|%*s|%*s|\n", len, $1, len, $2 ) }'
|               small|                   A|
|incredibly humungous|                   B|

同样的事情,但是对于两列分别:

$ longest_line() { awk -F '\t' 'length > m { m = length } END { print m }' "$1"; }
$ paste file1 file2 | awk -F '\t' -v len1=$( longest_line file1 ) -v len2=$( longest_line file2 ) '{ printf("|%*s|%*s|\n", len1, $1, len2, $2 ) }'
|               small|A|
|incredibly humungous|B|

答案3

它不是paste,但我认为lam 是你想要的工具。

lam  -f-30 file1 file2
小A
难以置信的巨大B

相关内容