Sunday, January 29, 2017

uniq(1) -- not just for sorted input

For years I've mostly used uniq -c with sorted input but I've recently realized that uniq is great for vertical compression/counting.

Here I pipe clipboard contents into uniq -c to see how many blank lines appear between the application of changes 6881 and 6882:

 % cb | uniq -c
      1 applying 6881, event id = 148047427, INSERT_TEXT,6239,0,6240,0,[
      1 ]
      1 applying 6882, event id = 148047428, INSERT_LINES,6240,0,7479,0,[
   1237 
      1 ]
      1 applying 6883, event id = 148047429, INSERT_TEXT,7479,0,7480,0,[
      1 ]
      1 2017-01-29 17:25:00,762 LimitedEditCodeServiceImpl WARN  - Exception applying deltas to program text
      1 java.lang.IndexOutOfBoundsException: Index: 7479, Size: 6244
      1         at java.util.ArrayList.rangeCheck(ArrayList.java:635)
      1         at java.util.ArrayList.get(ArrayList.java:411)
      1         at org.cloudcoder.app.shared.model.TextDocument.getLine(TextDocument.java:59)
      1         at org.cloudcoder.app.shared.model.ApplyChangeToTextDocument.apply(ApplyChangeToTextDocument.java:41)
      1         at edu.arizona.cs.practice.codeextraction.LimitedEditCodeServiceImpl.doLoadCurrentText(LimitedEditCodeServiceImpl.java:103)
      1         at edu.arizona.cs.practice.codeextraction.Test1.main(Test1.java:112)

Below I use uniq -c to collapse repeated lines in query output:

% cb | uniq -c
      1 +----------+---------------------+-----------------+------+
      1 | username | date                | testname        | type |
      1 +----------+---------------------+-----------------+------+
      1 | zjones   | 2017-01-19 09:22:56 | number2letter   |    2 |
      1 | zjones   | 2017-01-19 09:22:56 | number2letter   |    0 |
      2 | zjones   | 2017-01-19 09:23:16 | number2letter   |    0 |
      1 | zjones   | 2017-01-19 09:25:06 | number2letter   |    0 |
      2 | zjones   | 2017-01-19 09:25:08 | number2letter   |    0 |
      1 | zjones   | 2017-01-19 09:25:09 | number2letter   |    0 |
      2 | zjones   | 2017-01-19 09:25:10 | number2letter   |    0 |
      3 | zjones   | 2017-01-19 09:25:11 | number2letter   |    0 |
      3 | zjones   | 2017-01-19 09:25:12 | number2letter   |    0 |
      2 | zjones   | 2017-01-19 09:25:18 | number2letter   |    0 |
      1 | zjones   | 2017-01-19 09:25:31 | number2letter   |    0 |
      ...

No comments: