Làm thế nào để khác biệt chỉ dòng đầu tiên của hai tập tin?


17

Tôi muốn chỉ khác dòng đầu tiên của hai tệp, trái ngược với toàn bộ tệp. Làm thế nào tôi sẽ làm điều đó? Tôi chỉ cần một giải pháp cho dòng đầu tiên, nhưng nếu bạn có thể chỉ định số lượng dòng sẽ là một câu trả lời tốt hơn nhiều.

Vì vậy, diff sẽ trả về không có sự khác biệt giữa hai tệp sau:

a
1
2

và:

a
3
4

điều đó có hiệu quả với bạn không ...?
nerdwaller

@nerdwaller Yup, được chấp nhận.
gsingh2011

đậu nguội. Đã cố gắng nghĩ về các lựa chọn khác, may mắn thay, điều đó không cần thiết.
nerdwaller

Câu trả lời:


26

Ở đây bạn đi:

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

(điều này sẽ không trả lại bất cứ điều gì như vậy).

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

Returns:
2c2
< 1
---
> 3

Bạn có thể kết hợp nó vào một kịch bản để làm những điều bạn đề cập.

#!/bin/bash

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

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

Để sử dụng điều đó, chỉ cần làm cho tập lệnh có thể thực thi được chmod +x nameofscript.shvà sau đó thực thi, ./nameofscript.sh ~/file1 ~/Docs/file2Điều đó để lại số dòng mặc định là 1, nếu bạn muốn thêm một số vào cuối lệnh đó.

.

headtrả về từ đầu # dòng theo đề xuất của -n. Nếu bạn muốn làm ngược lại, nó sẽ là tail -n ${numLines}(đuôi làm từ cuối trở lại số dòng).

Chỉnh sửa 5/10/16:

Điều này là đặc trưng cho Bash (và shell tương thích). Nếu bạn cần sử dụng cái này từ thứ khác:

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

Làm thế nào mà làm việc cho diff đệ quy khi tôi cần diff hai thư mục?
lanoxx

@lanoxx diff -r dir1 dir2cho các thư mục, để giới hạn nó, có lẽ bạn sẽ muốn chuyển nó sang thứ khác. Nếu bạn có chi tiết cụ thể hãy mở một câu hỏi mới và đưa ra một liên kết ở đây.
nerdwaller

Về cơ bản, cùng một câu hỏi chỉ là đệ quy: Chỉ khác (n dòng đầu tiên | mọi thứ trừ n dòng đầu tiên) cho tất cả các tệp trong hai thư mục.
lanoxx

@lanoxx như tôi đã nói, tạo một câu hỏi mới và liên kết nó. Đó là cách tốt nhất cho cộng đồng siêu người dùng thay vì mở rộng phạm vi câu hỏi của một số người dùng khác.
nerdwaller

1
@Veridian Bạn đang sử dụng shell nào? Đây là bash cụ thể, vì vậy bạn có thể cần gọibash -c "diff <(...) <(...)"
nerdwaller

-1

diff -U (n của dòng) file1 file2


1
Chào mừng bạn đến với Siêu người dùng! Bạn có thể giải thích một chút về -Ulập luận? :)
bertieb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.