0

各ファイルの最初の 91 文字を照合して file2 と file1 を比較し、file2 から file3 に完全なレコードを出力します。私は Unix コマンドに不慣れで、これを理解できないようです。

前もって感謝します、ジェフ

4

2 に答える 2

0

次のようにダミーファイルを生成しました。

ファイル1

A012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
B012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
C012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
D012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
E012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
F012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

ファイル2

Z012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 1
B012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 2
T012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 3
D012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 4
E012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 5
F012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 6

次に、これが必要だと思います:

awk '
   # Processing for file1, basically create associative array entry indexed by leftmost 91 characters
   FNR==NR { f1[substr($0,1,91)]++; next }

   # Processing for second file
   f1[substr($0,1,91)] > 0

   ' file1 file2

サンプル出力

B012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 2
D012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 4
E012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 5
F012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 Line 6

実際には、正確に他の行が必要になると思います。もしそうなら、これを変更してください:

f1[substr($0,1,91)] > 0

これに:

! f1[substr($0,1,91)]
于 2016-10-29T09:40:05.413 に答える
0

を使用して 2 つのファイルを比較できますcmp

$ cmp file1 file2
file1 file2 differ: byte 92, line 1

最初の 91 バイトのみを比較したい場合は、-nスイッチを使用できます。

$ cmp -n 91 file1 file2

その場合に何かをしたい場合(たとえば、ファイルを別のファイルにコピーする)、bashのを使用できますif

if cmp -n 91 file1 file2; then
    cp file2 file3
fi
于 2016-10-28T20:14:48.970 に答える