假设两个内容不同的列表。为简单起见,我们假设这些列表仅包含字母数字字符串。我想在bash
中组合并垂直对齐两个列表。
user$ cat file1
foo
foo
bar
qux
user$ cat file2
foo
bar
bar
baz
qux
user$ sought_command file1 file2
foo foo
foo -
bar bar
- bar
- baz
qux qux
每行值(此处为单个空格)之间的分隔符不需要由用户选择,但可以进行硬编码。占位符也是如此(这里是一个破折号)。
修改
理想情况下,此命令不限于两个输入列表,但可以接受任意数量的输入文件,每个输入文件与指定的第一个输入文件进行比较。
user$ sought_command file1 file2 file2
foo foo foo
foo - -
bar bar bar
- bar bar
- baz baz
qux qux qux
答案 0 :(得分:3)
您可以diff
使用-y
标记来获取:
$ diff -y file1 file2
foo foo
foo <
bar bar
> bar
> baz
qux qux
以及tr
和sed
:
$ diff -t -y file1 file2 | tr -s ' ' | sed 's/[<>]/-/'
foo foo
foo -
bar bar
- bar
- baz
qux qux
答案 1 :(得分:1)
这是一个非常可能更快的版本的Ohad Eytan的答案,只与极大或多个文件相关:
diff -t -y file1 file2 | tr -s ' ' | tr '[<>]' '-' | grep -o '\S\+ \S\+'
答案 2 :(得分:0)
仅比较2个文件时,只需diff
和sed
即可。
diff -y file1 file2 | sed 's/[[:space:]]\+/ /g' | sed 's/[<,>]/- /g'
结果(很好地排队):
foo foo
foo -
bar bar
- bar
- baz
qux qux
为了处理大于2的输入文件,还需要做更多工作。