16

Я хочу различать только первую строку из двух файлов, в отличие от всего файла. Как бы я это сделал? Мне нужно решение только для первой строки, но если бы вы могли указать количество строк, это было бы гораздо лучшим ответом.

Таким образом, diff не возвращает различий между следующими двумя файлами:

a
1
2

а также:

a
3
4

2 ответа2

24

Ну вот:

diff <(head -n 1 file1) <(head -n 1 file2)

(это ничего бы не вернуло как никогда).

diff <(head -n 2 file1) <(head -n 2 file2)

Returns:
2c2
< 1
---
> 3

Вы можете включить это в сценарий, чтобы делать то, что вы упоминаете.

#!/bin/bash

fileOne=${1}
fileTwo=${2}
numLines=${3:-"1"}

diff <(head -n ${numLines} ${fileOne}) <(head -n ${numLines} ${fileTwo})

Чтобы использовать это, просто сделайте сценарий исполняемым с помощью chmod +x nameofscript.sh а затем выполните ./nameofscript.sh ~/file1 ~/Docs/file2 который оставляет число строк по умолчанию равным 1, если вы хотите больше, добавьте номер до конца этой команды.

(Или вы могли бы сделать переключатели в вашем скрипте с -f1 file1 -f2 file2 -n 1, но я не помню, чтобы в верхней части моей головы был указан case).

head возвращает с начала количество строк в соответствии с предложением -n . Если бы вы захотели сделать обратное, это был бы tail -n ${numLines} (tail делает с конца число строк).

Изменить 5/10/16:

Это характерно для Bash (и совместимых оболочек). Если вам нужно использовать это из чего-то другого:

bash -c 'diff <(...) <(...)'
-1

diff -U (n строк) файл1 файл2

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