私は、2つのソートされた出力(行ごとの比較、いずれかの側からの追加/欠落行のみ)でcomm -3
の出力を提供するものから探していますが、diff -y
からの出力に似ています。 、例えば全幅を使用するという点で。
file1
:
bar/a
bar/feugiat
bar/libero
bar/mauris
bar/scelerisque
bar/urna
foo/blandit
foo/elementum
foo/feugiat
foo/laoreet
foo/luctus
foo/non
foo/pellentesque
foo/pulvinar
foo/rutrum
foo/sed
foo/ut
foo/vivamus
file2
:
bar/a
bar/molestie
bar/quam
bar/risus
bar/tristique
foo/blandit
foo/elementum
foo/feugiat
foo/ligula
foo/massa
foo/mauris
foo/metus
foo/pellentesque
foo/pulvinar
foo/ut
comm -3 file1 file2
からの出力:
bar/feugiat
bar/libero
bar/mauris
bar/molestie
bar/quam
bar/risus
bar/scelerisque
bar/tristique
bar/urna
foo/laoreet
foo/ligula
foo/luctus
foo/massa
foo/mauris
foo/metus
foo/non
foo/rutrum
foo/sed
foo/vivamus
diff -y --suppress-common-lines file1 file2
(GNU)からの出力、画面幅によって異なります。
bar/feugiat | bar/molestie
bar/libero | bar/quam
bar/mauris | bar/risus
bar/scelerisque | bar/tristique
bar/urna <
foo/laoreet | foo/ligula
foo/luctus | foo/massa
foo/non | foo/mauris
> foo/metus
foo/rutrum / foo/ut
foo/sed <
foo/ut <
foo/vivamus <
私が望む可能な出力:
bar/feugiat <
bar/libero <
bar/mauris <
> bar/molestie
> bar/quam
> bar/risus
bar/scelerisque <
> bar/tristique
bar/urna <
foo/laoreet <
> foo/ligula
foo/luctus <
> foo/massa
> foo/mauris
> foo/metus
foo/non <
foo/rutrum <
foo/sed <
foo/vivamus <
矢印がなくても問題ありませんが、画面の幅だけを使用することをお勧めします。
bar/feugiat
bar/libero
bar/mauris
bar/molestie
bar/quam
bar/risus
bar/scelerisque
bar/tristique
bar/urna
foo/laoreet
foo/ligula
foo/luctus
foo/massa
foo/mauris
foo/metus
foo/non
foo/rutrum
foo/sed
foo/vivamus
次の場所にパイプできます。
expand -t "$((${COLUMNS:-$(tput cols)} / 2))"
または山括弧の場合:
awk -v cols="${COLUMNS:-$(tput cols)}" '
BEGIN {width = cols/2-1; space = sprintf("%*s", width, "")}
/^\t/ {print space ">", substr($0, 2); next}
{printf "%-*s<\n", width, $0}'
tput
が列数を出力しない場合は、stty size
またはstty -a
の出力を解析してみてください。または、zsh -c 'echo $COLUMNS'
を使用します(mksh
でも機能します)。その情報を取得するための標準的/ポータブルな方法はありません。
入力ファイルにマルチバイト文字または倍幅文字が含まれている場合は、YMMV。 expand
/awk
の実装によっては、アライメントがオフになっている場合があります。
また、入力ファイルにタブ文字で始まる行がないことも前提としています。それが保証できない場合は、GNU comm
の実装には--output-delimiter
があり、これを使用して一意の文字列を指定できます。または、comm
機能をawk
に実装することもできます。複雑すぎないでください。