Score:0

Bash Script: เปรียบเทียบไฟล์ข้อความสองไฟล์

ธง by

ฉันสงสัยว่าฉันจะทำสิ่งนี้ได้อย่างมีประสิทธิภาพได้อย่างไร จากไฟล์สองไฟล์ เช่น a.txt และ b.txt ฉันต้องการเขียนสคริปต์ทุบตีเพื่อทำสิ่งต่อไปนี้:

ทุกบรรทัดใน a.txt ที่มี '*' ที่ไม่มีอยู่ใน b.txt จะถูกเพิ่มที่ท้าย b.txt พร้อมประทับเวลา

grep "*" a.txt echo "$(วันที่)" >> b.txt
pLumo avatar
in flag
Please edit your question and add some examples of your files and the expected output.
terdon avatar
cn flag
ไม่มีทางที่จะมีประสิทธิภาพจากระยะไกลใน bash สิ่งนี้ _need_ จะทุบตีหรือไม่ ฉันเห็นว่าคุณเปิดใช้เครื่องมือที่ไม่ทุบตีอย่างเช่น `grep` เป็นอย่างน้อย ดังนั้นเราสามารถใช้ `awk` หรือ `sed` หรือ `perl` ฯลฯ ได้ไหม เชลล์หรือเชลล์ใด ๆ เป็นเครื่องมือที่น่ากลัวสำหรับการประมวลผลข้อความ: มันจะช้าและไม่มีประสิทธิภาพเสมอ
Taro avatar
by flag
@terdon ขอบคุณที่ให้ความกระจ่างแก่ฉัน
Score:0
ธง za

ฉันแนะนำให้คุณใช้ไฟล์ที่สามสำหรับผลลัพธ์ เพื่อไม่ให้ไฟล์ b.txt ยุ่ง คุณสามารถลองสิ่งนี้:

cp b.txt c.txt 
สำหรับบรรทัดใน $(grep '*' a.txt); ทำ
    # สำหรับแต่ละบรรทัดที่พบใน a.txt
    echo "พบ: $line"
    grep -q $line b.txt # ตรวจสอบว่ามีอยู่ใน b.txt
    ถ้า [ $? -เน่ 0 ]; แล้ว
        # ถ้าผลลัพธ์ของ grep ไม่เท่ากับ 0
        # หมายความว่าไม่พบบรรทัดใน b.txt
        # จากนั้นพิมพ์บรรทัดในไฟล์ที่สามโดยมีการประทับเวลานำหน้า
        echo "$(วันที่): $line" >> c.txt
    ไฟ
เสร็จแล้ว

เป็นที่ชัดเจนว่าบางทีคุณควรปรับปรุง grep เนื่องจากฉันไม่รู้ว่าแถวที่คุณกำลังค้นหาประกอบด้วย '*'

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา