最初のファイルの行の長さに関係なく、貼り付けの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 |
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|
同じですが、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