以下は、2つのサンプルファイルのリストです。 (ファイル)ファイルのリスト(最後の「/」の右側の各レコードの最後の「X」文字)を比較する必要があります。
ファイル名が見つからない場合は、行全体を3番目のファイルに出力に送信する必要があります。
これはファイルのリストです。 2番目のリストには3つのファイルがあり、最初のリストには2,000のファイルがあります。
最初のもの:
1 /home/dev/share/Datafiles/cases.dbf
2 /home/dev/share/Datafiles/cells.csv
3 /home/dev/share/Datafiles/clusters.db
4 /home/dev/share/データファイル/competition.csv
5 /home/dev/share/Datafiles/coplot.csv
6 /home/dev/share/Datafiles/daphnia.csv
7 /home/dev/share/Datafiles/das.txt
8 /home/dev /share /Datafiles/deaths.sas7bdat
9 /home/dev/share/Datafiles/decay.csv
10 /home/dev/share/Datafiles/example.db
11 /home/dev/share/Datafiles/fertyield.lst
12 /home /dev /share/Datafiles/fisher.csv
2つ:
1 /test/kitchen/cooks/transfer/cases.dbf
2 /test/kitchen/cooks/transfer/cells.csv
3 /test/kitchen/cooks/transfer/clusters.db
4 /test/kitchen/cooks/ transfer /coplot.csv
5 /test/kitchen/cooks/transfer/das.txt
6 /test/kitchen/cooks/transfer/deaths.sas7bdat
7 /test/kitchen/cooks/transfer/decay.csv
8 /test/kitchen/ cooks /transfer/example.db
9 /test/kitchen/cooks/transfer/fertyield.lst
10 /test/kitchen/cooks/transfer/fisher.csv
リスト1にはあるがリスト2にはない2つのファイル:「Competition.csv」(#4)と「daphinia.csv」(#6)。
ファイルの並べ替えが機能しないため、ファイルパスが非常に短くなったり長くなったり、ファイルの複数のコピーが複数のディレクトリにあることがあります。
Comm/diff/cmpは、各行の右側にある最後の「X」文字(ファイル名、拡張子ベース)のみを探しているため、満足のいく結果が得られません。
(Microsfot EXCELではすべてを右に抽出します。)最後の「/」を1行ずつ別のリストに保存し、そのリストを最初のリストと一緒にVLOOKUPします。 )
ただし、これはマイクロソフトのインストールではありません。
リスト(ファイル)2の内容とリスト(ファイル)1を検索するスクリプト、出力がファイル3と一致しませんか?
また、sedを使用してディレクトリ名を解析し、2つのファイル名のリストのみを残すことは困難です。毎回違うので、どのルートを置き換えたいのかわかりません。切り取りしようとしましたが、ファイル名の先頭は列10から列150まで可能です。私の直感は、ファイルパスの最後の「/」の右側にあるすべての文字を分離する方法があることです。
それではまた私が間違っているかもしれません。
答え1
使用grep
:
grep -F -x -v -f <(grep -o '[^/]*$' file2) <(grep -o '[^/]*$' file1) > file3
内側の2つはgrep
各行のファイル名部分(最後の行以降のすべての項目/
)を返し、外部grep
項目は最初の内部の出力を2番目のパラメータのgrep
パターン入力ファイル()として使用します。-f
つまり、file1のfile2のすべてのファイル名を逆順に返します(-v
)。出力はfile3にリダイレクトされます。オプション-F
は、正規表現の代わりに固定文字列を一致させ、行-x
全体を一致させるために使用されます。
コンテンツfile3
:
$ cat file3
competition.csv
daphnia.csv