1

私は2つのファイルlarge_inputsubset_inputファイルを持っており、それらの内容は

large_input

1
34
65
7643
hello
we

subset_input

65
we
hello
34

この場合、sortコマンドはあまり役に立ちません。sort | uniqdiff

質問 データを並べ替えることができないシナリオでは (その内容のために)、見つけるための最良の方法は何ですか?

large_input-subset_inputどれになるでしょうか

1
7643
4

3 に答える 3

1

これはまさにそのcommために作られています:

comm -23 <(sort large_input) <(sort subset_input)
于 2012-11-13T00:50:35.903 に答える
1
diff <(sort file1) <(sort file2) | sed '/^[0-9][0-9]*[acd][0-9]*/d;s/^[<>] //'

私のために働く、

出力:

1
7643

一部のシェルは をサポートしていないため<(sort fileX)、ファイル ファイルをその場で事前に並べ替える必要がある場合があります。sort -o file1 file1; sort file -o file2 file2; ....

sed 式は から出力を削除しますdiff。それが何をしているのかを確認するには、最初に sed を完全に削除し、一度に 1 セクション (セミコロンで区切られた) を追加します。

これが役立つことを願っています。

于 2012-11-12T19:56:26.090 に答える
0

sed を使用して、ジョブを実行する sed スクリプトを作成できます。

sed -e 's#^#/^#' -e 's#$#$/d#' subset_input > sed_script

次に、この sed スクリプトを large_input に適用するのは簡単です。

sed -f sed_script large_input

bash がある場合は、一時ファイルなしで実行できます。

sed -f <(sed -e 's#^#/^#' -e 's#$#$/d#' subset_input) large_input

ただし、この解決策は「妥当な」サイズのsubset_inputにのみ適用されます。

于 2012-11-12T23:43:27.973 に答える