尋找資料檔案中遺失的序號

尋找資料檔案中遺失的序號

如何在特定列中搜尋帶有「序號」(在 16 後重置)的大檔案以查找遺失的行?

我有一個數據檔:

col1 col2 col3 col4 col5 1
col1 col2 col3 col4 col5 2
.
.
.
col1 col2 col3 col4 col5 15
col1 col2 col3 col4 col5 16
col1 col2 col3 col4 col5+1 1

最後一列從 1 計數到 16,然後重設回 1。此時,第 5 列已新增 1。

乾淨的輸出只會迭代直到文件末尾。我怎樣才能找到丟失的數據,例如

col1 col2 col3 col4 col5 1
col1 col2 col3 col4 col5 3

從跳過了值 2 的最後一列可以看出,其中一行已被跳過/丟失?

我希望將丟失資料之前或之後的行的行號/位置作為所需的輸出。

Stack Overflow 上的這個答案給了我使用的想法awk。所以我想出來的是:

awk '$6!=p+1{print NR}{p=$6}'

當目前行的第 6 列不等於最後一行的第 6 列 +1 時,請嘗試列印目前行號。由於達到 16 並返回 1 的循環性質,此操作失敗。

答案1

$ cat -n file
 1  col1 col2 col3 col4 col5 14
 2  col1 col2 col3 col4 col5 15
 3  col1 col2 col3 col4 col5 16
 4  col1 col2 col3 col4 col5 1
 5  col1 col2 col3 col4 col5 2
 6  col1 col2 col3 col4 col5 15
 7  col1 col2 col3 col4 col5 16
 8  col1 col2 col3 col4 col5 4
 9  col1 col2 col3 col4 col5 5

$ awk '{if (p % 16 + 1 != $6) printf("line %d is bad: %s\n", NR, $0); p=$6}' file
line 1 is bad: col1 col2 col3 col4 col5 14
line 6 is bad: col1 col2 col3 col4 col5 15
line 8 is bad: col1 col2 col3 col4 col5 4

要了解模運算子「%」(除法餘數)的值,您可以使用以下 awk 程式碼片段:

$ yes | head -n 40 | awk '{x=NR-1; print x, "->", x % 16}'
0 -> 0
1 -> 1
2 -> 2
[...]
14 -> 14
15 -> 15
16 -> 0
17 -> 1
18 -> 2
[...]

相關內容