无论第一个文件中的行长度如何,如何使粘贴中的第二个文件在同一位置开始?例如:
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