Linuxの貼り付けコマンドで出力を並べ替える

Linuxの貼り付けコマンドで出力を並べ替える

最初のファイルの行の長さに関係なく、貼り付けの2番目のファイルが同じ場所から始まるようにするにはどうすればよいですか?たとえば、

file1:
small
incredibly humungous

file 2:
A
B

file1 file2を出力に貼り付けたいです。

small                        A
incredibly humungous         B

変える:

small                        A
incredibly humungous                        B

答え1

column区切り文字としてwithコマンドを使用できますtab

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    |

file1andで最長行を見つけ、呼び出し時にフィールドの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|

同じですが、2つの列に対して別々に:

$ 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

貼り付けではありませんが、ラムが欲しいツールだと思います。

lam  -f-30 file1 file2
リトルA
とても巨大なB

関連情報