Як відрізняти лише перший рядок з двох файлів?


17

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

Так diff не поверне різниці між двома наступними файлами:

a
1
2

і:

a
3
4

це працювало для вас ...?
nerdwaller

@nerdwaller Yup, прийнято.
gsingh2011

прохолодні боби. Намагався продумати інші варіанти, на щастя, це не потрібно.
nerdwaller

Відповіді:


26

Ось вам:

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, але я не пригадую верхньої частини голови заяву про це).

headповертає з початку # рядків, як запропоновано -n. Якби ви хотіли зробити зворотний tail -n ${numLines}шлях , це було б (хвіст робить з кінця назад кількість рядків).

Редагувати 5.10.16:

Це специфічно для Bash (і сумісних оболонок). Якщо вам потрібно скористатися цим із чогось іншого:

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

Як би це працювало для рекурсивної різниці, коли мені потрібно розмежувати два каталоги?
lanoxx

@lanoxx diff -r dir1 dir2для каталогів, щоб обмежити його, ви, ймовірно, захочете передати це щось інше. Якщо у вас є конкретні дані, відкрийте нове запитання та дайте посилання тут.
nerdwaller

Ну в основному те саме питання рекурсивно: лише розрізняти (перші n рядків | все, крім перших n рядків) для всіх файлів у двох каталогах.
lanoxx

@lanoxx, як я вже сказав, поставте нове запитання і зв’яжіть його. Краща практика для спільноти супер користувачів замість розширення сфери запитання інших користувачів.
nerdwaller

1
@Veridian Яку оболонку ви використовуєте? Це специфічно для bash -c "diff <(...) <(...)"
башти

-1

diff -U (n рядків) file1 file2


1
Ласкаво просимо до Супер Користувача! Чи можете ви трохи розібратися в -Uаргументі? :)
bertieb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.