我想在两列中打印两个文件——第一个文件在左侧,第二个文件在右侧。
paste
不做这项工作,因为它只能插入一个字符作为分隔符,所以如果第一个文件行的长度不同,输出将被扭曲:
$ cat file1
looooooooong line
line
$ cat file2
hello
world
$ paste file1 file2
looooooooong line hello
line world
Run Code Online (Sandbox Code Playgroud)
如果这是一个添加尾随空格的命令,fmt --add-spaces --width 50
问题将得到解决:
$ paste <(fmt --add-spaces --width 50 file1) file2
looooooooong line hello
line world
Run Code Online (Sandbox Code Playgroud)
但我不知道一个简单的方法来做到这一点。
那么如何在不扭曲的情况下水平合并打印多个文件呢?其实,我只是想同时看它们。
UPD:添加尾随空格的命令确实存在(例如,xargs -d '\n' printf '%-50s\n'
)
但解决方案如
$ paste <(add-trailing-spaces file1) file2
Run Code Online (Sandbox Code Playgroud)
当 file1 的行数少于 file2 时,它不会按预期工作。
$ echo $(echo x; echo y)
x y
$ a='echo x; echo y'
$ echo $($a) # expect 'x y'
x; echo y
Run Code Online (Sandbox Code Playgroud)
eval
和的情况下对存储在变量中的命令列表执行命令替换bash -c
?echo $(eval $a)
并且echo $(bash -c "$a")
实际上做了我想要的,但我听说使用 eval 经常是解决问题的错误方法,所以我想知道如何在没有这些命令的情况下进行管理(使用bash -c
实际上是一样的)
command-line bash command-substitution variable-substitution