Debian

跨文件管理重複行

  • January 23, 2017

我正在同一目錄中的 5 個文件之間生成所有公共/重複行

sort *.txt | uniq -d > output.txt

我需要output.txt與 File1.txt 合併(因此添加任何不是重複的內容)但是在 File2.txt 的其他地方,如果出現重複行,則需要將其刪除。

任何指針?使用 Debian

**編輯:**將輸出與 File1 合併很容易

cat output.txt >> File1.txt

然後使用正則表達式刪除重複項。

您可以對兩個文件(輸出和 file1.txt)進行分類,然後僅使用 uniq(無開關)查找 uniq 行,最後將結果寫回 file1.txt

例子:

$ cat output.txt
Line1
$ cat file1.txt
Line1
Line3
Line4
$ echo "$(cat output.txt file1.txt |sort |uniq)" >file1.txt
$ cat file1.txt
Line1
Line3
Line4

如果您希望完全刪除“Line1”並且一次也不保留,請使用 uniq -u。

$ echo "$(cat output.txt file1.txt |sort |uniq -u)" >file1.txt && cat file1.txt
Line3
Line4

您的 file2 的類似操作。

PS:您不能在一次操作中對同一個文件進行 cat 和 write。您必須使用上述echo $(...)技巧或將cat |uniq輸出發送到另一個文件(臨時文件),然後將 tempfile 重命名為 file1 ( mv tempfile file1.txt) 或cat tmpfile >file1.txt && rm tmpfile.

另一種解決方案是將 output.txt 附加到 file1.txt ( cat output.txt >>file1.txt) 並sed -i用於刪除重複的行

引用自:https://unix.stackexchange.com/questions/339474