我有一个制表符分隔的文本文件,我需要检查是否重复。布局看起来大致如此。 (文件中的第一项是列名。)
输入文件样本:
+--------+-----------+--------+------------+-------------+----------+
| First | Last | BookID | Title | PublisherID | AuthorID |
+--------+-----------+--------+------------+-------------+----------+
| James | Joyce | 37 | Ulysses | 344 | 1022 |
| Ernest | Hemingway | 733 | Old Man... | 887 | 387 |
| James | Joyce | 872 | Dubliners | 405 | 1022 |
| Name1 | Surname1 | 1 | Title1 | 1 | 1 |
| James | Joyce | 37 | Ulysses | 345 | 1022 |
| Name1 | Surname1 | 1 | Title1 | 2 | 1 |
+--------+-----------+--------+------------+-------------+----------+
文件最多可容纳50万行。我们要做的是检查BookID和AuthorID值是否重复。因此,例如,在上表中,没有书ID为37,作者ID为1022的两行。
可能,但不能保证,作者将按连续的行分组。如果不是这样,并且检查起来太棘手,我可以接受。但是否则,如果作者相同,我们需要知道是否存在重复的BookID。
一个复杂的问题-文件中可以有重复的BookID,但是不允许使用AuthorID + BookID的组合。
在bash脚本中是否有一种检查此问题的好方法,也许是sed
和awk
的组合,或者是另一种实现此目的的方法?
用于脚本编写的原始制表符分隔文件内容:
First Last BookID Title PublisherID AuthorID
James Joyce 37 Ulysses 344 1022
Ernest Hemingway 733 Old Man... 887 387
James Joyce 872 Dubliners 405 1022
Name1 Surname1 1 Title1 1 1
James Joyce 37 Ulysses 345 1022
Name1 Surname1 1 Title1 2 1