0

次のような内容のファイルが 2 つあります。

1.something344343
2.something2dsdsf
4.somethingdsddfsd
5.something920j329

2 番目のファイルは次のようになります。

1.somethingwoimewoiew
3.something9jwe90jew
7.something90kjwe90ewk

本質的に、最初のファイルは 2 番目のファイルよりも多くの行番号があり、最初のファイルは最大で約 39,000 行ですが、2 番目のファイルは最大で 23,000 行です。そうは言っても、最初のファイルを、ファイル 2 に含まれていた行番号 (コロンの前の番号) と、ファイル 2 に含まれていなかった行 (これは bash 環境にあります) に分ける方法を知っている人はいますか? 最終結果は、次のようなものになります。

lines included in second file:
1.something344343

lines not included in second file:
2.something2dsdsf
4.somethingdsddfsd
5.something920j329

これを行うために使用できるさまざまな方法を考えましたが、残念ながらまだ効果的な解決策を思いつくことができませんでした。

4

2 に答える 2

5

2 番目のファイルに含まれる行:

$ join -t"." -o 0,1.2 f1 f2
1.something344343

2 番目のファイルに含まれていない行:

$ join -t"." -v1 f1 f2
2.something2dsdsf
4.somethingdsddfsd
5.something920j329
于 2012-10-26T17:00:00.243 に答える
1

行番号のみを表示し、行の内容は表示しません。

$ diff --unchanged-group-format=$'Lines included in second file:\n%=' \
       --old-group-format=$'Lines not included in second file:\n%<' \
       --new-group-format='' \
       <(awk -F. '{print $1}' file1) <(awk -F. '{print $1}' file2)
Lines included in second file:
1
Lines not included in second file:
2
4
5
于 2012-10-26T17:02:03.317 に答える