1

У меня есть два простых текстовых файла, каждый файл содержит список строк, отсортированных в алфавитном порядке по одной строке в строке. Я хочу различать файлы и выводить все строки, которые существуют только в file2.

Предположительно, я хочу, чтобы операция была возможна без каких-либо сторонних инструментов или с минимумом установок инструментов, которые "нормальны" найти в среде командной строки Windows, такой как GNU Diffutils, Powershell и т.д. Вывод должен быть в текстовая форма (файл или как вывод командной строки).

Пример:

File 1 contents:
A
C
D

File 2 contents:
A
B
C
E

Result wanted:
B
E

2 ответа2

4

В Windows PowerShell (прямой порт diff /grep com of grawity):

Compare-Object (Get-Content file1) (Get-Content file2) |
    Where-Object { $_.SideIndicator -eq '=>' } |
    Select-Object -ExpandProperty InputObject

Это может быть сокращено до:

diff (gc file1) (gc file2) | ?{$_.SideIndicator -eq '=>'} | %{$_.InputObject}

или обернут в функцию, если она вам нужна чаще, чем один раз.

2
comm -13 file_a file_b

(-13 это -1 -3)


diff a b | grep "^>"
diff a b | sed -n "/^>/ s/^> //p"

Вы можете получить очень маленький набор инструментов от UnxUtils - устаревший, да, но достаточно для этого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .