[
  {
    "path": ".flake8",
    "content": "[flake8]\nignore = E501, W503\n"
  },
  {
    "path": "LICENSE.md",
    "content": "GNU GENERAL PUBLIC LICENSE\n==========================\n\nVersion 2, June 1991\n\nCopyright (C) 1989, 1991 Free Software Foundation, Inc.  \n51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\n\nEveryone is permitted to copy and distribute verbatim copies of this license\ndocument, but changing it is not allowed.\n\nPreamble\n========\n\nThe licenses for most software are designed to take away your freedom to share\nand change it. By contrast, the GNU General Public License is intended to\nguarantee your freedom to share and change free software--to make sure the\nsoftware is free for all its users. This General Public License applies to most\nof the Free Software Foundation's software and to any other program whose\nauthors commit to using it. (Some other Free Software Foundation software is\ncovered by the GNU Lesser General Public License instead.) You can apply it to\nyour programs, too.\n\nWhen we speak of free software, we are referring to freedom, not price. Our\nGeneral Public Licenses are designed to make sure that you have the freedom to\ndistribute copies of free software (and charge for this service if you wish),\nthat you receive source code or can get it if you want it, that you can change\nthe software or use pieces of it in new free programs; and that you know you\ncan do these things.\n\nTo protect your rights, we need to make restrictions that forbid anyone to deny\nyou these rights or to ask you to surrender the rights. These restrictions\ntranslate to certain responsibilities for you if you distribute copies of the\nsoftware, or if you modify it.\n\nFor example, if you distribute copies of such a program, whether gratis or for\na fee, you must give the recipients all the rights that you have. You must make\nsure that they, too, receive or can get the source code. And you must show them\nthese terms so they know their rights.\n\nWe protect your rights with two steps: (1) copyright the software, and (2)\noffer you this license which gives you legal permission to copy, distribute\nand/or modify the software.\n\nAlso, for each author's protection and ours, we want to make certain that\neveryone understands that there is no warranty for this free software. If the\nsoftware is modified by someone else and passed on, we want its recipients to\nknow that what they have is not the original, so that any problems introduced\nby others will not reflect on the original authors' reputations.\n\nFinally, any free program is threatened constantly by software patents. We wish\nto avoid the danger that redistributors of a free program will individually\nobtain patent licenses, in effect making the program proprietary. To prevent\nthis, we have made it clear that any patent must be licensed for everyone's\nfree use or not licensed at all.\n\nThe precise terms and conditions for copying, distribution and modification\nfollow.\n\nTERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n===============================================================\n\n0. This License applies to any program or other work which contains a notice\nplaced by the copyright holder saying it may be distributed under the terms of\nthis General Public License. The \"Program\", below, refers to any such program\nor work, and a \"work based on the Program\" means either the Program or any\nderivative work under copyright law: that is to say, a work containing the\nProgram or a portion of it, either verbatim or with modifications and/or\ntranslated into another language. (Hereinafter, translation is included without\nlimitation in the term \"modification\".) Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not covered by\nthis License; they are outside its scope. The act of running the Program is not\nrestricted, and the output from the Program is covered only if its contents\nconstitute a work based on the Program (independent of having been made by\nrunning the Program). Whether that is true depends on what the Program does.\n\n1. You may copy and distribute verbatim copies of the Program's source code as\nyou receive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice and\ndisclaimer of warranty; keep intact all the notices that refer to this License\nand to the absence of any warranty; and give any other recipients of the\nProgram a copy of this License along with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and you may\nat your option offer warranty protection in exchange for a fee.\n\n2. You may modify your copy or copies of the Program or any portion of it, thus\nforming a work based on the Program, and copy and distribute such modifications\nor work under the terms of Section 1 above, provided that you also meet all of\nthese conditions:\n\na) You must cause the modified files to carry prominent notices stating that\nyou changed the files and the date of any change.\n\nb) You must cause any work that you distribute or publish, that in whole or in\npart contains or is derived from the Program or any part thereof, to be\nlicensed as a whole at no charge to all third parties under the terms of this\nLicense.\n\nc) If the modified program normally reads commands interactively when run, you\nmust cause it, when started running for such interactive use in the most\nordinary way, to print or display an announcement including an appropriate\ncopyright notice and a notice that there is no warranty (or else, saying that\nyou provide a warranty) and that users may redistribute the program under these\nconditions, and telling the user how to view a copy of this License.\n(Exception: if the Program itself is interactive but does not normally print\nsuch an announcement, your work based on the Program is not required to print\nan announcement.)\n\nThese requirements apply to the modified work as a whole. If identifiable\nsections of that work are not derived from the Program, and can be reasonably\nconsidered independent and separate works in themselves, then this License, and\nits terms, do not apply to those sections when you distribute them as separate\nworks. But when you distribute the same sections as part of a whole which is a\nwork based on the Program, the distribution of the whole must be on the terms\nof this License, whose permissions for other licensees extend to the entire\nwhole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest your\nrights to work written entirely by you; rather, the intent is to exercise the\nright to control the distribution of derivative or collective works based on\nthe Program.\n\nIn addition, mere aggregation of another work not based on the Program with the\nProgram (or with a work based on the Program) on a volume of a storage or\ndistribution medium does not bring the other work under the scope of this\nLicense.\n\n3. You may copy and distribute the Program (or a work based on it, under\nSection 2) in object code or executable form under the terms of Sections 1 and\n2 above provided that you also do one of the following:\n\na) Accompany it with the complete corresponding machine-readable source code,\nwhich must be distributed under the terms of Sections 1 and 2 above on a medium\ncustomarily used for software interchange; or,\n\nb) Accompany it with a written offer, valid for at least three years, to give\nany third party, for a charge no more than your cost of physically performing\nsource distribution, a complete machine-readable copy of the corresponding\nsource code, to be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange; or,\n\nc) Accompany it with the information you received as to the offer to distribute\ncorresponding source code. (This alternative is allowed only for noncommercial\ndistribution and only if you received the program in object code or executable\nform with such an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for making\nmodifications to it. For an executable work, complete source code means all the\nsource code for all modules it contains, plus any associated interface\ndefinition files, plus the scripts used to control compilation and installation\nof the executable. However, as a special exception, the source code distributed\nneed not include anything that is normally distributed (in either source or\nbinary form) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component itself\naccompanies the executable.\n\nIf distribution of executable or object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the source\ncode from the same place counts as distribution of the source code, even though\nthird parties are not compelled to copy the source along with the object code.\n\n4. You may not copy, modify, sublicense, or distribute the Program except as\nexpressly provided under this License. Any attempt otherwise to copy, modify,\nsublicense or distribute the Program is void, and will automatically terminate\nyour rights under this License. However, parties who have received copies, or\nrights, from you under this License will not have their licenses terminated so\nlong as such parties remain in full compliance.\n\n5. You are not required to accept this License, since you have not signed it.\nHowever, nothing else grants you permission to modify or distribute the Program\nor its derivative works. These actions are prohibited by law if you do not\naccept this License. Therefore, by modifying or distributing the Program (or\nany work based on the Program), you indicate your acceptance of this License to\ndo so, and all its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n6. Each time you redistribute the Program (or any work based on the Program),\nthe recipient automatically receives a license from the original licensor to\ncopy, distribute or modify the Program subject to these terms and conditions.\nYou may not impose any further restrictions on the recipients' exercise of the\nrights granted herein. You are not responsible for enforcing compliance by\nthird parties to this License.\n\n7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues), conditions\nare imposed on you (whether by court order, agreement or otherwise) that\ncontradict the conditions of this License, they do not excuse you from the\nconditions of this License. If you cannot distribute so as to satisfy\nsimultaneously your obligations under this License and any other pertinent\nobligations, then as a consequence you may not distribute the Program at all.\nFor example, if a patent license would not permit royalty-free redistribution\nof the Program by all those who receive copies directly or indirectly through\nyou, then the only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply and\nthe section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any patents or\nother property right claims or to contest validity of any such claims; this\nsection has the sole purpose of protecting the integrity of the free software\ndistribution system, which is implemented by public license practices. Many\npeople have made generous contributions to the wide range of software\ndistributed through that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing to\ndistribute software through any other system and a licensee cannot impose that\nchoice.\n\nThis section is intended to make thoroughly clear what is believed to be a\nconsequence of the rest of this License.\n\n8. If the distribution and/or use of the Program is restricted in certain\ncountries either by patents or by copyrighted interfaces, the original\ncopyright holder who places the Program under this License may add an explicit\ngeographical distribution limitation excluding those countries, so that\ndistribution is permitted only in or among countries not thus excluded. In such\ncase, this License incorporates the limitation as if written in the body of\nthis License.\n\n9. The Free Software Foundation may publish revised and/or new versions of the\nGeneral Public License from time to time. Such new versions will be similar in\nspirit to the present version, but may differ in detail to address new problems\nor concerns.\n\nEach version is given a distinguishing version number. If the Program specifies\na version number of this License which applies to it and \"any later version\",\nyou have the option of following the terms and conditions either of that\nversion or of any later version published by the Free Software Foundation. If\nthe Program does not specify a version number of this License, you may choose\nany version ever published by the Free Software Foundation.\n\n10. If you wish to incorporate parts of the Program into other free programs\nwhose distribution conditions are different, write to the author to ask for\npermission. For software which is copyrighted by the Free Software Foundation,\nwrite to the Free Software Foundation; we sometimes make exceptions for this.\nOur decision will be guided by the two goals of preserving the free status of\nall derivatives of our free software and of promoting the sharing and reuse of\nsoftware generally.\n\nNO WARRANTY\n===========\n\n11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR\nTHE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE\nSTATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE\nPROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,\nINCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND\nPERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU\nASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL\nANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE\nPROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR\nINABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA\nBEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER\nOR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\nEND OF TERMS AND CONDITIONS\n===========================\n\n"
  },
  {
    "path": "README.md",
    "content": "New Canonical Source\n====================\n\nI have taken employment such that it is difficult for me to be the owner of this project.\nI have transferred control to [the excellent engineer wizzat](https://github.com/wizzat/distribution).\nPlease contribute any PRs, issues, etc to that project rather than this one. Thank you,\nand it's been good serving you these past years.\n\ndistribution\n============\n\nShort, simple, direct scripts for creating character-based graphs in a\ncommand terminal. Status: stable. Features added very rarely.\n\n![diagram](https://raw.github.com/philovivero/distribution/master/screenshot.png?raw=true)\n\n\nPurpose\n=======\n\nTo generate graphs directly in the (ASCII-based) terminal. Most common use-case:\nif you type `long | list | of | commands | sort | uniq -c | sort -rn` in the terminal,\nthen you could replace the final `| sort | uniq -c | sort -rn` with `| distribution` and\nvery likely be happier with what you see.\n\nThe tool is mis-named. It was originally for generating histograms (a distribution\nof the frequency of input tokens) but it has since been expanded to generate\ntime-series graphs (or, in fact, graphs with any arbitrary \"x-axis\") as well.\n\nAt first, there will be only two scripts, the originals written in Perl and\nPython by Tim Ellis. Any other versions people are willing to create will be placed\nhere. The next likely candidate language is C++.\n\nThere are a few typical use cases for graphs in a terminal as we'll lay out here:\n\n## Tokenize and Graph\n\nA stream of ASCII bytes, tokenize it, tally the matching tokens, and graph\nthe result. For this example, assume \"file\" is a list of words with one word\nper line, so passing it to \"xargs\" makes it all-one-line.\n\n```\n$ cat file | xargs #put all words on one line\nthis is an arbitrary stream of tokens. this will be graphed with tokens pulled out. this is the first use case.\n$ cat file | xargs | distribution --tokenize=word --match=word --size=small -v\ntokens/lines examined: 25\n tokens/lines matched: 21\n       histogram keys: 17\n              runtime: 8.00ms\n      Key|Ct (Pct)    Histogram\n     this|3 (14.29%) -----------------------------------------------------------------------o\n       is|2  (9.52%) ---------------------------------------o\n   tokens|2  (9.52%) ---------------------------------------o\n  graphed|1  (4.76%) -------o\n     will|1  (4.76%) -------o\n```\n\n## Aggregate and Graph\n\nAn already-tokenised input, one-per-line, tally and graph them.\n\n```\n$ cat file | distribution -s=small -v\ntokens/lines examined: 21\n tokens/lines matched: 21\n       histogram keys: 18\n              runtime: 14.00ms\n      Key|Ct (Pct)    Histogram\n     this|3 (14.29%) -----------------------------------------------------------------------o\n       is|2  (9.52%) ---------------------------------------o\n  graphed|1  (4.76%) -------o\n       be|1  (4.76%) -------o\n```\n\n## Graph Already-Aggregated/Counted Tokens\n\nA list of tallies + tokens, one-per-line. Create a graph with labels. This matches\nthe typical output of several Unix commands such as \"du.\"\n\n```\n$ du -s /etc/*/ 2>/dev/null | distribution -g -v\ntokens/lines examined: 107\n tokens/lines matched: 5,176\n       histogram keys: 107\n              runtime: 2.00ms\n                    Key|Ct  (Pct)    Histogram\n              /etc/ssl/|920 (17.77%) -------------------------------------------\n           /etc/init.d/|396  (7.65%) -------------------\n              /etc/apt/|284  (5.49%) -------------\n   /etc/nagios-plugins/|224  (4.33%) -----------\n              /etc/cis/|188  (3.63%) ---------\n           /etc/nagios/|180  (3.48%) ---------\n            /etc/fonts/|172  (3.32%) --------\n              /etc/ssh/|172  (3.32%) --------\n          /etc/default/|164  (3.17%) --------\n    /etc/console-setup/|132  (2.55%) -------\n```\n\n## Graph a List of Integers\n\nA list of tallies only. Create a graph without labels. This is typical if you just\nhave a stream of numbers and wonder what they look like. The `--numonly` switch is\nused to toggle this behaviour.\n\nThere is a different project: https://github.com/holman/spark that will produce\nsimpler, more-compact graphs. By contrast, this project will produce rather\nlengthy and verbose graphs with far more resolution, which you may prefer.\n\n\nFeatures\n========\n\n   0. Configurable colourised output.\n   1. rcfile for your own preferred default commandline options.\n   2. Full Perl tokenising and regexp matching.\n   3. Partial-width Unicode characters for high-resolution charts.\n   4. Configurable chart sizes including \"fill up my whole screen.\"\n\n\nInstallation\n============\n\nIf you use homebrew, `brew install distribution` should do the trick, although\nif you already have Perl or Python installed, you can simply download the file\nand put it into your path.\n\nTo put the script into your homedir on the machine you plan to run the script:\n\n```\n$ wget https://raw.githubusercontent.com/philovivero/distribution/master/distribution.py\n$ sudo mv distribution.py /usr/local/bin/distribution\n$ alias worddist=\"distribution -t=word\"\n```\n\nIt is fine to place the script anywhere in your `$PATH`. The worddist alias is\nuseful for asking the script to tokenize the input for you eg `ls -alR | worddist`.\n\n\nOptions\n=======\n\n```\n  --keys=K       periodically prune hash to K keys (default 5000)\n  --char=C       character(s) to use for histogram character, some substitutions follow:\n        pl       Use 1/3-width unicode partial lines to simulate 3x actual terminal width\n        pb       Use 1/8-width unicode partial blocks to simulate 8x actual terminal width\n        ba       (▬) Bar\n        bl       (Ξ) Building\n        em       (—) Emdash\n        me       (⋯) Mid-Elipses\n        di       (♦) Diamond\n        dt       (•) Dot\n        sq       (□) Square\n  --color        colourise the output\n  --graph[=G]    input is already key/value pairs. vk is default:\n        kv       input is ordered key then value\n        vk       input is ordered value then key\n  --height=N     height of histogram, headers non-inclusive, overrides --size\n  --help         get help\n  --logarithmic  logarithmic graph\n  --match=RE     only match lines (or tokens) that match this regexp, some substitutions follow:\n        word     ^[A-Z,a-z]+$ - tokens/lines must be entirely alphabetic\n        num      ^\\d+$        - tokens/lines must be entirely numeric\n  --numonly[=N]  input is numerics, simply graph values without labels\n        actual   input is just values (default - abs, absolute are synonymous to actual)\n        diff     input monotonically-increasing, graph differences (of 2nd and later values)\n  --palette=P    comma-separated list of ANSI colour values for portions of the output\n                 in this order: regular, key, count, percent, graph. implies --color.\n  --rcfile=F     use this rcfile instead of $HOME/.distributionrc - must be first argument!\n  --size=S       size of histogram, can abbreviate to single character, overridden by --width/--height\n        small    40x10\n        medium   80x20\n        large    120x30\n        full     terminal width x terminal height (approximately)\n  --tokenize=RE  split input on regexp RE and make histogram of all resulting tokens\n        word     [^\\w] - split on non-word characters like colons, brackets, commas, etc\n        white    \\s    - split on whitespace\n  --width=N      width of the histogram report, N characters, overrides --size\n  --verbose      be verbose\n```\n\n\nSyslog Analysis Example\n=======================\n\nYou can grab out parts of your syslog ask the script to tokenize on non-word\ndelimiters, then only match words. The verbosity gives you some stats as it\nworks and right before it prints the histogram.\n\n```\n$ zcat /var/log/syslog*gz \\\n    | awk '{print $5\" \"$6}' \\\n    | distribution --tokenize=word --match=word --height=10 --verbose --char=o\ntokens/lines examined: 16,645    \n tokens/lines matched: 5,843\n       histogram keys: 92\n              runtime: 10.75ms\nVal       |Ct (Pct)      Histogram\nntop      |1818 (31.11%) ooooooooooooooooooooooooooooooooooooooooooooooooooooooo\nWARNING   |1619 (27.71%) ooooooooooooooooooooooooooooooooooooooooooooooooo\nkernel    |1146 (19.61%) ooooooooooooooooooooooooooooooooooo\nCRON      |153 (2.62%)   ooooo\nroot      |147 (2.52%)   ooooo\nmessage   |99 (1.69%)    ooo\nlast      |99 (1.69%)    ooo\nntpd      |99 (1.69%)    ooo\ndhclient  |88 (1.51%)    ooo\nTHREADMGMT|52 (0.89%)    oo\n```\n\n\nProcess List Example\n====================\n\nYou can start thinking of normal commands in new ways. For example, you can take\nyour \"ps ax\" output, get just the command portion, and do a word-analysis on it.\nYou might find some words are rather interesting. In this case, it appears Chrome\nis doing some sort of A/B testing and their commandline exposes that.\n\n```\n$ ps axww \\\n    | cut -c 28- \\\n    | distribution --tokenize=word --match=word --char='|' --width=90 --height=25\nVal                     |Ct (Pct)    Histogram\nusr                     |100 (6.17%) |||||||||||||||||||||||||||||||||||||||||||||||||||||\nlib                     |73 (4.51%)  ||||||||||||||||||||||||||||||||||||||\nbrowser                 |38 (2.35%)  ||||||||||||||||||||\nchromium                |38 (2.35%)  ||||||||||||||||||||\nP                       |32 (1.98%)  |||||||||||||||||\ndaemon                  |31 (1.91%)  |||||||||||||||||\nsbin                    |26 (1.60%)  ||||||||||||||\ngnome                   |23 (1.42%)  ||||||||||||\nbin                     |22 (1.36%)  ||||||||||||\nkworker                 |21 (1.30%)  |||||||||||\ntype                    |19 (1.17%)  ||||||||||\ngvfs                    |17 (1.05%)  |||||||||\nno                      |17 (1.05%)  |||||||||\nen                      |16 (0.99%)  |||||||||\nindicator               |15 (0.93%)  ||||||||\nchannel                 |14 (0.86%)  ||||||||\nbash                    |14 (0.86%)  ||||||||\nUS                      |14 (0.86%)  ||||||||\nlang                    |14 (0.86%)  ||||||||\nforce                   |12 (0.74%)  |||||||\npluto                   |12 (0.74%)  |||||||\nProxyConnectionImpact   |12 (0.74%)  |||||||\nHiddenExperimentB       |12 (0.74%)  |||||||\nConnectBackupJobsEnabled|12 (0.74%)  |||||||\nsession                 |12 (0.74%)  |||||||\n```\n\n\nGraphing Pre-Tallied Tokens Example\n===================================\n\nSometimes the output you have is already some keys with their counts. For\nexample the output of \"du\" or \"command | uniq -c\". In these cases, use the\n--graph (-g) option, which skips the parsing and tokenizing of the input.\n\nFurther, you can use very short versions of the options in case you don't like\ntyping a lot. The default character is \"+\" because it creates a type of grid\nsystem which makes it easy for the eye to trace right/left or up/down.\n\n```\n$ sudo du -sb /etc/* | distribution -w=90 -h=15 -g\nVal                   |Ct (Pct)         Histogram\n/etc/mateconf         |7780758 (44.60%) +++++++++++++++++++++++++++++++++++++++++++++++++\n/etc/brltty           |3143272 (18.02%) ++++++++++++++++++++\n/etc/apparmor.d       |1597915 (9.16%)  ++++++++++\n/etc/bash_completion.d|597836 (3.43%)   ++++\n/etc/mono             |535352 (3.07%)   ++++\n/etc/ssl              |465414 (2.67%)   +++\n/etc/ardour2          |362303 (2.08%)   +++\n/etc/X11              |226309 (1.30%)   ++\n/etc/ImageMagick      |202358 (1.16%)   ++\n/etc/init.d           |143281 (0.82%)   +\n/etc/ssh              |138042 (0.79%)   +\n/etc/fonts            |119862 (0.69%)   +\n/etc/sound            |112051 (0.64%)   +\n/etc/xdg              |111971 (0.64%)   +\n/etc/java-7-openjdk   |100414 (0.58%)   +\n```\n\n\nKeys in Natural Order Examples\n==============================\n\nThe output is separated between STDOUT and STDERR so you can sort the resulting\nhistogram by values. This is useful for time series or other cases where the\nkeys you're graphing are in some natural order. Note how the \"-v\" output still\nappears at the top.\n\n```\n$ cat NotServingRegionException-DateHour.txt \\\n    | distribution -v \\\n    | sort -n\ntokens/lines examined: 1,414,196    \n tokens/lines matched: 1,414,196\n       histogram keys: 453\n              runtime: 1279.30ms\nVal             |Ct (Pct)      Histogram\n   2012-07-13 03|38360 (2.71%) ++++++++++++++++++++++++\n   2012-07-28 21|18293 (1.29%) ++++++++++++\n   2012-07-28 23|20748 (1.47%) +++++++++++++\n   2012-07-29 06|15692 (1.11%) ++++++++++\n   2012-07-29 07|30432 (2.15%) +++++++++++++++++++\n   2012-07-29 08|76943 (5.44%) ++++++++++++++++++++++++++++++++++++++++++++++++\n   2012-07-29 09|54955 (3.89%) ++++++++++++++++++++++++++++++++++\n   2012-07-30 05|15652 (1.11%) ++++++++++\n   2012-07-30 09|40102 (2.84%) +++++++++++++++++++++++++\n   2012-07-30 10|21718 (1.54%) ++++++++++++++\n   2012-07-30 16|16041 (1.13%) ++++++++++\n   2012-08-01 09|22740 (1.61%) ++++++++++++++\n   2012-08-02 04|31851 (2.25%) ++++++++++++++++++++\n   2012-08-02 06|28748 (2.03%) ++++++++++++++++++\n   2012-08-02 07|18062 (1.28%) ++++++++++++\n   2012-08-02 20|23519 (1.66%) +++++++++++++++\n   2012-08-03 03|21587 (1.53%) ++++++++++++++\n   2012-08-03 08|33409 (2.36%) +++++++++++++++++++++\n   2012-08-03 10|15854 (1.12%) ++++++++++\n   2012-08-03 15|29828 (2.11%) +++++++++++++++++++\n   2012-08-03 16|20478 (1.45%) +++++++++++++\n   2012-08-03 17|39758 (2.81%) +++++++++++++++++++++++++\n   2012-08-03 18|19514 (1.38%) ++++++++++++\n   2012-08-03 19|18353 (1.30%) ++++++++++++\n   2012-08-03 22|18726 (1.32%) ++++++++++++\n__________________\n\n$ cat /usr/share/dict/words \\\n    | awk '{print length($1)}' \\\n    | distribution -c=: -w=90 -h=16 \\\n    | sort -n\nVal|Ct (Pct)       Histogram\n2 |182 (0.18%)    :\n3 |845 (0.85%)    ::::\n4 |3346 (3.37%)   ::::::::::::::::\n5 |6788 (6.84%)   :::::::::::::::::::::::::::::::\n6 |11278 (11.37%) ::::::::::::::::::::::::::::::::::::::::::::::::::::\n7 |14787 (14.91%) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n8 |15674 (15.81%) ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n9 |14262 (14.38%) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n10|11546 (11.64%) :::::::::::::::::::::::::::::::::::::::::::::::::::::\n11|8415 (8.49%)   :::::::::::::::::::::::::::::::::::::::\n12|5508 (5.55%)   :::::::::::::::::::::::::\n13|3236 (3.26%)   :::::::::::::::\n14|1679 (1.69%)   ::::::::\n15|893 (0.90%)    :::::\n16|382 (0.39%)    ::\n17|176 (0.18%)    :\n```\n\n\nMySQL Slow Query Log Analysis Examples\n======================================\n\nYou can sometimes gain interesting insights just by measuring the size of files\non your filesystem. Someone had captured slow-query-logs for every hour for\nmost of a day. Assuming they all compressed the same (a proper analysis would\nbe on uncompressed files - uncompressing them would have caused server impact -\nthis is good enough for illustration's sake), we can determine how much slow\nquery traffic appeared during a given hour of the day.\n\nSomething happened around 8am but otherwise the server seems to follow a normal\nsinusoidal pattern. But note because we're only analysing the file size, it\ncould be that 8am had the same number of slow queries, but that the queries\nthemselves were larger in byte-count. Or that the queries didn't compress as\nwell.\n\nAlso note that we aren't seeing every histogram entry here. Always take care to\nremember the tool is hiding low-frequency data from you unless you ask it to\ndraw uncommonly-tall histograms.\n\n```\n$ du -sb mysql-slow.log.*.gz | ~/distribution -g | sort -n\nVal                 |Ct (Pct)         Histogram\nmysql-slow.log.01.gz|1426694 (5.38%)  ++++++++++++++++++++\nmysql-slow.log.02.gz|1499467 (5.65%)  +++++++++++++++++++++\nmysql-slow.log.03.gz|1840727 (6.94%)  ++++++++++++++++++++++++++\nmysql-slow.log.04.gz|1570131 (5.92%)  ++++++++++++++++++++++\nmysql-slow.log.05.gz|1439021 (5.42%)  ++++++++++++++++++++\nmysql-slow.log.07.gz|859939 (3.24%)   ++++++++++++\nmysql-slow.log.08.gz|2976177 (11.21%) ++++++++++++++++++++++++++++++++++++++++++\nmysql-slow.log.09.gz|792269 (2.99%)   +++++++++++\nmysql-slow.log.11.gz|722148 (2.72%)   ++++++++++\nmysql-slow.log.12.gz|825731 (3.11%)   ++++++++++++\nmysql-slow.log.14.gz|1476023 (5.56%)  +++++++++++++++++++++\nmysql-slow.log.15.gz|2087129 (7.86%)  +++++++++++++++++++++++++++++\nmysql-slow.log.16.gz|1905867 (7.18%)  +++++++++++++++++++++++++++\nmysql-slow.log.19.gz|1314297 (4.95%)  +++++++++++++++++++\nmysql-slow.log.20.gz|802212 (3.02%)   ++++++++++++\n```\n\nA more-proper analysis on another set of slow logs involved actually getting\nthe time the query ran, pulling out the date/hour portion of the timestamp, and\ngraphing the result.\n\nAt first blush, it might appear someone had captured logs for various hours of\none day and at 10am for several days in a row. However, note that the Pct\ncolumn shows this is only about 20% of all data, which we can also conclude\nbecause there are 964 histogram entries, of which we're only seeing a couple\ndozen. This means something happened on July 31st that caused slow queries all\nday, and then 10am is a time of day when slow queries tend to happen. To test\nthis theory, we might re-run this with a \"--height=600\" (or even 900) to see\nnearly all the entries to get a more precise idea of what's going on.\n\n```\n$ zcat mysql-slow.log.*.gz \\\n    | fgrep Time: \\\n    | cut -c 9-17 \\\n    | ~/distribution --width=90 --verbose \\\n    | sort -n\ntokens/lines examined: 30,027    \n tokens/lines matched: 30,027\n       histogram keys: 964\n              runtime: 1224.58ms\nVal      |Ct (Pct)    Histogram\n120731 03|274 (0.91%) ++++++++++++++++++++++++++++++++++\n120731 04|210 (0.70%) ++++++++++++++++++++++++++\n120731 07|208 (0.69%) ++++++++++++++++++++++++++\n120731 08|271 (0.90%) +++++++++++++++++++++++++++++++++\n120731 09|403 (1.34%) +++++++++++++++++++++++++++++++++++++++++++++++++\n120731 10|556 (1.85%) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n120731 11|421 (1.40%) +++++++++++++++++++++++++++++++++++++++++++++++++++\n120731 12|293 (0.98%) ++++++++++++++++++++++++++++++++++++\n120731 13|327 (1.09%) ++++++++++++++++++++++++++++++++++++++++\n120731 14|318 (1.06%) +++++++++++++++++++++++++++++++++++++++\n120731 15|446 (1.49%) ++++++++++++++++++++++++++++++++++++++++++++++++++++++\n120731 16|397 (1.32%) ++++++++++++++++++++++++++++++++++++++++++++++++\n120731 17|228 (0.76%) ++++++++++++++++++++++++++++\n120801 10|515 (1.72%) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n120803 10|223 (0.74%) +++++++++++++++++++++++++++\n120809 10|215 (0.72%) ++++++++++++++++++++++++++\n120810 10|210 (0.70%) ++++++++++++++++++++++++++\n120814 10|193 (0.64%) ++++++++++++++++++++++++\n120815 10|205 (0.68%) +++++++++++++++++++++++++\n120816 10|207 (0.69%) +++++++++++++++++++++++++\n120817 10|226 (0.75%) ++++++++++++++++++++++++++++\n120819 10|197 (0.66%) ++++++++++++++++++++++++\n```\n\nA typical problem for MySQL administrators is figuring out how many slow queries\nare taking how long. The slow query log can be quite verbose. Analysing it in a\nvisual nature can help. For example, there is a line that looks like this in the\nslow query log:\n\n```\n # Query_time: 5.260353  Lock_time: 0.000052  Rows_sent: 0  Rows_examined: 2414  Rows_affected: 1108  Rows_read: 2\n```\n\nIt might be useful to see how many queries ran for how long in increments of\ntenths of seconds. You can grab that third field and get tenth-second\nprecision with a simple awk command, then graph the result.\n\nIt seems interesting that there are spikes at 3.2, 3.5, 4, 4.3, 4.5 seconds.\nOne hypothesis might be that those are individual queries, each warranting its\nown analysis.\n\n```\n$ head -90000 mysql-slow.log.20120710 \\\n    | fgrep Query_time: \\\n    | awk '{print int($3 * 10)/10}' \\\n    | ~/distribution --verbose --height=30 --char='|o' \\\n    | sort -n\ntokens/lines examined: 12,269    \n tokens/lines matched: 12,269\n       histogram keys: 481\n              runtime: 12.53ms\nVal|Ct (Pct)     Histogram\n0  |1090 (8.88%) ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||o\n2  |1018 (8.30%) |||||||||||||||||||||||||||||||||||||||||||||||||||||||||o\n2.1|949 (7.73%)  |||||||||||||||||||||||||||||||||||||||||||||||||||||o\n2.2|653 (5.32%)  |||||||||||||||||||||||||||||||||||||o\n2.3|552 (4.50%)  |||||||||||||||||||||||||||||||o\n2.4|554 (4.52%)  |||||||||||||||||||||||||||||||o\n2.5|473 (3.86%)  ||||||||||||||||||||||||||o\n2.6|423 (3.45%)  ||||||||||||||||||||||||o\n2.7|394 (3.21%)  ||||||||||||||||||||||o\n2.8|278 (2.27%)  |||||||||||||||o\n2.9|189 (1.54%)  ||||||||||o\n3  |173 (1.41%)  |||||||||o\n3.1|193 (1.57%)  ||||||||||o\n3.2|200 (1.63%)  |||||||||||o\n3.3|138 (1.12%)  |||||||o\n3.4|176 (1.43%)  ||||||||||o\n3.5|213 (1.74%)  ||||||||||||o\n3.6|157 (1.28%)  ||||||||o\n3.7|134 (1.09%)  |||||||o\n3.8|121 (0.99%)  ||||||o\n3.9|96 (0.78%)   |||||o\n4  |110 (0.90%)  ||||||o\n4.1|80 (0.65%)   ||||o\n4.2|84 (0.68%)   ||||o\n4.3|90 (0.73%)   |||||o\n4.4|76 (0.62%)   ||||o\n4.5|93 (0.76%)   |||||o\n4.6|79 (0.64%)   ||||o\n4.7|71 (0.58%)   ||||o\n5.1|70 (0.57%)   |||o\n```\n\n\nApache Logs Analysis Example\n============================\n\nEven if you know sed/awk/grep, the built-in tokenizing/matching can be less\nverbose. Say you want to look at all the URLs in your Apache logs. People will\nbe doing GET /a/b/c /a/c/f q/r/s q/n/p. A and Q are the most common, so you can\ntokenize on / and the latter parts of the URL will be buried, statistically.\n\nBy tokenizing and matching using the script, you may also find unexpected\ncommon portions of the URL that don't show up in the prefix.\n\n```\n$ zcat access.log*gz \\\n    | awk '{print $7}' \\\n    | distribution -t=/ -h=15\nVal            |Ct (Pct)      Histogram\nArt            |1839 (16.58%) +++++++++++++++++++++++++++++++++++++++++++++++++\nRendered       |1596 (14.39%) ++++++++++++++++++++++++++++++++++++++++++\nBlender        |1499 (13.52%) ++++++++++++++++++++++++++++++++++++++++\nAznRigging     |760 (6.85%)   ++++++++++++++++++++\nMusic          |457 (4.12%)   ++++++++++++\nRingtones      |388 (3.50%)   +++++++++++\nCuteStance     |280 (2.52%)   ++++++++\nTraditional    |197 (1.78%)   ++++++\nTechnology     |171 (1.54%)   +++++\nCreativeExhaust|134 (1.21%)   ++++\nFractals       |127 (1.15%)   ++++\nrobots.txt     |125 (1.13%)   ++++\nRingtoneEP1.mp3|125 (1.13%)   ++++\nPoetry         |108 (0.97%)   +++\nRingtoneEP2.mp3|95 (0.86%)    +++\n```\n\nHere we had pulled apart our access logs and put them in TSV format for input\ninto Hive. The user agent string was in the 13th position. I wanted to just get an\noverall idea of what sort of user agents were coming to the site. I'm using the\nminimal argument size and my favorite \"character\" combo of \"|o\". I find it interesting\nthat there were only 474 unique word-based tokens in the input. Also, it's clear\nthat a large percentage of the visitors come with mobile devices now.\n\n```\n$ zcat weblog-2014-05.tsv.gz \\\n  | awk -F '\\t' '{print $13}' \\\n  | distribution -t=word -m=word -c='|o' -s=m -v\ntokens/lines examined: 28,062,913    \n tokens/lines matched: 11,507,407\n       histogram keys: 474\n              runtime: 15659.97ms\nVal        |Ct (Pct)       Histogram\nMozilla    |912852 (7.93%) ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||o\nlike       |722945 (6.28%) |||||||||||||||||||||||||||||||||||||||||||||||||||||||||o\nOS         |611503 (5.31%) ||||||||||||||||||||||||||||||||||||||||||||||||o\nAppleWebKit|605618 (5.26%) |||||||||||||||||||||||||||||||||||||||||||||||o\nGecko      |535620 (4.65%) ||||||||||||||||||||||||||||||||||||||||||o\nWindows    |484056 (4.21%) ||||||||||||||||||||||||||||||||||||||o\nNT         |483085 (4.20%) ||||||||||||||||||||||||||||||||||||||o\nKHTML      |356730 (3.10%) ||||||||||||||||||||||||||||o\nSafari     |355400 (3.09%) ||||||||||||||||||||||||||||o\nX          |347033 (3.02%) |||||||||||||||||||||||||||o\nMac        |344205 (2.99%) |||||||||||||||||||||||||||o\nappversion |300816 (2.61%) |||||||||||||||||||||||o\nType       |299085 (2.60%) |||||||||||||||||||||||o\nConnection |299085 (2.60%) |||||||||||||||||||||||o\nMobile     |282759 (2.46%) ||||||||||||||||||||||o\nCPU        |266837 (2.32%) |||||||||||||||||||||o\nNET        |247418 (2.15%) |||||||||||||||||||o\nCLR        |247418 (2.15%) |||||||||||||||||||o\nAspect     |242566 (2.11%) |||||||||||||||||||o\nRatio      |242566 (2.11%) |||||||||||||||||||o\n```\n\nAnd here we had a list of referrers in \"referrer [count]\" format. They were done one per day, but I wanted a count for January through September, so I used a shell glob to specify all those files for my 'cat'. Distribution will notice that it's getting the same key as previously and just add the new value, so the key \"x1\" can come in many times and we'll get the aggregate in the output. The referrers have been anonymized here since they are very specific to the company.\n\n```\n$ cat referrers-20140* | distribution -v -g=kv -s=m\ntokens/lines examined: 133,564    \n tokens/lines matched: 31,498,986\n       histogram keys: 14,882\n              runtime: 453.45ms\nVal    |Ct (Pct)          Histogram\nx1     |24313595 (77.19%) ++++++++++++++++++++++++++++++++++++++++++++++++++++\nx2     |3430278 (10.89%)  ++++++++\nx3     |1049996 (3.33%)   +++\nx4     |210083 (0.67%)    +\nx5     |179554 (0.57%)    +\nx6     |163158 (0.52%)    +\nx7     |129997 (0.41%)    +\nx8     |122725 (0.39%)    +\nx9     |120487 (0.38%)    +\nxa     |109085 (0.35%)    +\nxb     |99956 (0.32%)     +\nxc     |92208 (0.29%)     +\nxd     |90017 (0.29%)     +\nxe     |79416 (0.25%)     +\nxf     |70094 (0.22%)     +\nxg     |58089 (0.18%)     +\nxh     |52349 (0.17%)     +\nxi     |37002 (0.12%)     +\nxj     |36651 (0.12%)     +\nxk     |32860 (0.10%)     +\n```\n\nThis seems a really good time to use the --logarithmic option, since that top referrer\nis causing a loss of resolution on the following ones! I'll re-run this for one month.\n\n```\n$ cat referrers-201402* | distribution -v -g=kv -s=m -l\ntokens/lines examined: 23,517    \n tokens/lines matched: 5,908,765 \n       histogram keys: 5,888\n              runtime: 78.28ms\nVal  |Ct (Pct)         Histogram\nx1   |4471708 (75.68%) +++++++++++++++++++++++++++++++++++++++++++++++++++++\nx2   |670703 (11.35%)  ++++++++++++++++++++++++++++++++++++++++++++++\nx3   |203489 (3.44%)   ++++++++++++++++++++++++++++++++++++++++++\nx4   |43751 (0.74%)    +++++++++++++++++++++++++++++++++++++\nx5   |36211 (0.61%)    ++++++++++++++++++++++++++++++++++++\nx6   |34589 (0.59%)    ++++++++++++++++++++++++++++++++++++\nx7   |31279 (0.53%)    ++++++++++++++++++++++++++++++++++++\nx8   |29596 (0.50%)    +++++++++++++++++++++++++++++++++++\nx9   |23125 (0.39%)    +++++++++++++++++++++++++++++++++++\nxa   |21429 (0.36%)    ++++++++++++++++++++++++++++++++++\nxb   |19670 (0.33%)    ++++++++++++++++++++++++++++++++++\nxc   |19057 (0.32%)    ++++++++++++++++++++++++++++++++++\nxd   |18945 (0.32%)    ++++++++++++++++++++++++++++++++++\nxe   |18936 (0.32%)    ++++++++++++++++++++++++++++++++++\nxf   |16015 (0.27%)    +++++++++++++++++++++++++++++++++\nxg   |13115 (0.22%)    +++++++++++++++++++++++++++++++++\nxh   |12067 (0.20%)    ++++++++++++++++++++++++++++++++\nxi   |8485 (0.14%)     +++++++++++++++++++++++++++++++\nxj   |7694 (0.13%)     +++++++++++++++++++++++++++++++\nxk   |7199 (0.12%)     +++++++++++++++++++++++++++++++\n```\n\nGraphing a Series of Numbers Example\n====================================\n\nSuppose you just have a list of integers you want to graph. For example, you've\ncaptured a \"show global status\" for every second for 5 minutes, and you want to\ngrep out just one stat for the five-minute sample and graph it.\n\nOr, slightly more-difficult, you want to pull out the series of numbers and\nonly graph the difference between each pair (as in a monotonically-increasing\ncounter). The ```--numonly=``` option takes care of both these cases. This option\nwill override any \"height\" and simply graph all the numbers, since there's no\nfrequency to dictate which values are more important to graph than others.\n\nTherefore there's a lot of output, which is snipped in the example output that\nfollows. The \"val\" column is simply an ascending list of integers, so you can\ntell where output was snipped by the jumps in those values.\n\n```\n$ grep ^Innodb_data_reads globalStatus*.txt \\\n    | awk '{print $2}' \\\n    | distribution --numonly=mon --char='|+'\nVal|Ct (Pct)     Histogram\n1  |0 (0.00%)    +\n91 |15 (0.05%)   +\n92 |14 (0.04%)   +\n93 |30 (0.10%)   |+\n94 |11 (0.03%)   +\n95 |922 (2.93%)  |||||||||||||||||||||||||||||||||||||||||||||||||||||||||+\n96 |372 (1.18%)  |||||||||||||||||||||||+\n97 |44 (0.14%)   ||+\n98 |37 (0.12%)   ||+\n99 |110 (0.35%)  ||||||+\n100|18 (0.06%)   |+\n101|12 (0.04%)   +\n102|19 (0.06%)   |+\n103|164 (0.52%)  ||||||||||+\n200|62 (0.20%)   |||+\n201|372 (1.18%)  |||||||||||||||||||||||+\n202|228 (0.72%)  ||||||||||||||+\n203|43 (0.14%)   ||+\n204|917 (2.91%)  ||||||||||||||||||||||||||||||||||||||||||||||||||||||||+\n205|64 (0.20%)   |||+\n206|178 (0.57%)  |||||||||||+\n207|90 (0.29%)   |||||+\n208|90 (0.29%)   |||||+\n209|101 (0.32%)  ||||||+\n453|0 (0.00%)    +\n454|0 (0.00%)    +\n```\n\nThe Python version eschews the header and superfluous \"key\" as the Perl version\nwill probably also soon do:\n\n```\n$ cat ~/tmp/numberSeries.txt | xargs\n01 05 06 09 12 22 28 32 34 30 37 44 48 54 63 70 78 82 85 88 89 89 90 92 95\n$ cat ~/tmp/numberSeries.txt \\\n    | ~/Dev/distribution/distribution.py --numonly -c='|o' -s=s\n   5  (0.39%) ||o\n   6  (0.47%) ||o\n   9  (0.70%) ||||o\n  12  (0.94%) |||||o\n  22  (1.71%) ||||||||||o\n  28  (2.18%) |||||||||||||o\n  32  (2.49%) |||||||||||||||o\n  34  (2.65%) ||||||||||||||||o\n  30  (2.34%) ||||||||||||||o\n  37  (2.88%) |||||||||||||||||o\n  44  (3.43%) ||||||||||||||||||||o\n  48  (3.74%) ||||||||||||||||||||||o\n  54  (4.21%) |||||||||||||||||||||||||o\n  63  (4.91%) |||||||||||||||||||||||||||||o\n  70  (5.46%) |||||||||||||||||||||||||||||||||o\n  78  (6.08%) ||||||||||||||||||||||||||||||||||||o\n  82  (6.39%) ||||||||||||||||||||||||||||||||||||||o\n  85  (6.63%) ||||||||||||||||||||||||||||||||||||||||o\n  88  (6.86%) |||||||||||||||||||||||||||||||||||||||||o\n  89  (6.94%) ||||||||||||||||||||||||||||||||||||||||||o\n  89  (6.94%) ||||||||||||||||||||||||||||||||||||||||||o\n  90  (7.01%) ||||||||||||||||||||||||||||||||||||||||||o\n  92  (7.17%) |||||||||||||||||||||||||||||||||||||||||||o\n  95  (7.40%) |||||||||||||||||||||||||||||||||||||||||||||o\n$ cat ~/tmp/numberSeries.txt \\\n\t| ~/Dev/distribution/distribution.py --numonly=diff -c='|o' -s=s\n   4  (4.26%) ||||||||||||||||||o\n   1  (1.06%) ||||o\n   3  (3.19%) |||||||||||||o\n   3  (3.19%) |||||||||||||o\n  10 (10.64%) |||||||||||||||||||||||||||||||||||||||||||||o\n   6  (6.38%) |||||||||||||||||||||||||||o\n   4  (4.26%) ||||||||||||||||||o\n   2  (2.13%) |||||||||o\n  -4 (-4.26%) o\n   7  (7.45%) |||||||||||||||||||||||||||||||o\n   7  (7.45%) |||||||||||||||||||||||||||||||o\n   4  (4.26%) ||||||||||||||||||o\n   6  (6.38%) |||||||||||||||||||||||||||o\n   9  (9.57%) ||||||||||||||||||||||||||||||||||||||||o\n   7  (7.45%) |||||||||||||||||||||||||||||||o\n   8  (8.51%) ||||||||||||||||||||||||||||||||||||o\n   4  (4.26%) ||||||||||||||||||o\n   3  (3.19%) |||||||||||||o\n   3  (3.19%) |||||||||||||o\n   1  (1.06%) ||||o\n   0  (0.00%) o\n   1  (1.06%) ||||o\n   2  (2.13%) |||||||||o\n   3  (3.19%) |||||||||||||o\n```\n\nHDFS DU Example\n===============\n\nHDFS files are often rather large, so I first change the numeric file size to\nmegabytes by dividing by 1048576. I must also change it to an int value, since\ndistribution doesn't currently deal with non-integer counts.\n\nAlso, we are pre-parsing the du output to give us only the megabytes count and\nthe final entry in the filename. `awk -F /` supports that.\n\n```\n$ hdfs dfs -du /apps/hive/warehouse/aedb/hitcounts_byday/cookie_type=shopper \\\n    | awk -F / '{print int($1/1048576) \" \" $8}' \\\n    | distribution -g -c='-~' --height=20 \\\n    | sort\n          Key|Ct      (Pct)   Histogram\ndt=2014-11-15|3265438 (2.53%) ----------------------------------------------~\ndt=2014-11-16|3241614 (2.51%) ----------------------------------------------~\ndt=2014-11-20|2964636 (2.29%) ------------------------------------------~\ndt=2014-11-21|3049912 (2.36%) -------------------------------------------~\ndt=2014-11-22|3292621 (2.55%) -----------------------------------------------~\ndt=2014-11-23|3319538 (2.57%) -----------------------------------------------~\ndt=2014-11-24|3070654 (2.38%) -------------------------------------------~\ndt=2014-11-25|3086090 (2.39%) --------------------------------------------~\ndt=2014-11-27|3113888 (2.41%) --------------------------------------------~\ndt=2014-11-28|3124426 (2.42%) --------------------------------------------~\ndt=2014-11-29|3431859 (2.66%) -------------------------------------------------~\ndt=2014-11-30|3391117 (2.62%) ------------------------------------------------~\ndt=2014-12-01|3167744 (2.45%) ---------------------------------------------~\ndt=2014-12-02|3134248 (2.43%) --------------------------------------------~\ndt=2014-12-03|3023733 (2.34%) -------------------------------------------~\ndt=2014-12-04|3022274 (2.34%) -------------------------------------------~\ndt=2014-12-05|3040776 (2.35%) -------------------------------------------~\ndt=2014-12-06|3054159 (2.36%) -------------------------------------------~\ndt=2014-12-09|3065252 (2.37%) -------------------------------------------~\ndt=2014-12-10|3316703 (2.57%) -----------------------------------------------~\n```\n\nRunning Tests\n=============\n\nThe `tests` directory contains sample input and output files, as well as a\nscript to verify expected output based on the sample inputs. To use it, first\nexport an environment variable called `distribution` that points to the\nlocation of your distribution executable. The script must be run from the `tests`\ndirectory. For example, the following will run tests against the Perl script\nand then against the Python script:\n\n    cd tests/\n\tdistribution=../distribution ./runTests.sh\n\tdistribution=../distribution.py ./runTests.sh\n\nThe `runTests.sh` script takes one optional argument, `-v`. This enables\nverbose mode, which prints out any differences in the stderr of the test runs,\nfor comparing diagnostic info.\n\nTo-Do List\n==========\n\nNew features are unlikely to be added, as the existing functionality is already\narguably a superset of what's necessary. Still, there are some things that need\nto be done.\n\n * No Time::HiRes Perl module? Don't die. Much harder than it should be.\n   Negated by next to-do.\n * Get scripts into package managers.\n\n\nPorting\n=======\n\nPerl and Python are fairly common, but I'm not sure 100% of systems out there\nhave them. A C/C++ port would be most welcome.\n\nIf you write a port, send me a pull request so I can include it in this repo.\n\nPort requirements: from the user's point of view, it's the exact same script.\nThey pass in the same options in the same way, and get the same output,\nbyte-for-byte if possible. This means you'll need (Perl) regexp support in your\nlanguage of choice. Also a hash map structure makes the implementation simple,\nbut more-efficient methods are welcome.\n\nI imagine, in order of nice-to-haveness:\n\n * C or C++\n * Go\n * Lisp\n * Ocaml\n * Java\n * Ruby\n\n List of known ports\n -------------------\n 1. [go-distribution](https://github.com/bradfordboyle/go-distribution)\n\n\nAuthors\n=======\n\n * Tim Ellis\n * Philo Vivero\n * Taylor Stearns\n"
  },
  {
    "path": "VERSION",
    "content": "1.2.2\n"
  },
  {
    "path": "distribution",
    "content": "#!/usr/bin/env perl\n\n# vim: set noexpandtab sw=4 ts=4:\n# --\n# A recent battle with vim and a Go program finally settled this for me.\n# Tabs for indent, spaces for formatting. If you change your shiftwidth and\n# tabstop to different values and your code looks ugly, say aloud: tabs\n# for indent, spaces for formatting.\n\n# distribution - creates histograms based on input\n#\n# Version 1.0\n#\n# Written by Tim Ellis of Fifth Sigma, Inc.\n# Copyright (c) 2012-2014 by Tim Ellis\n# Released under the terms of GNU GPLv2:\n#\n# This program is free software; you can redistribute it and/or modify it under\n# the terms of the GNU General Public License as published by the Free Software\n# Foundation; version 2 of the License.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\n# details.\n#\n# You should have received a copy of the GNU General Public License along with\n# this program; if not, visit http://www.gnu.org/licenses/gpl-2.0.html in your\n# web browser.\n#\n# If you're still living in the 1800's, you can instead write to:\n#\n# Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor,\n# Boston, MA 02110-1301, USA.\n\nuse warnings;\nuse strict;\n\n# Time::HiRes will be used if found, to provide more precise timings\n# with --verbose.\nBEGIN {\n    eval { require Time::HiRes; Time::HiRes->import('time'); 1; };\n}\n\n# for determining how long this program ran\nmy $startTime = time() * 1000;\n\n# defaults - overridden first by distributionrc then by commandline options\nmy $size = '';\nmy $width = 80;\nmy $height = 15;\nmy $widthArg = 0;\nmy $heightArg = 0;\nmy $logarithmic = 0;\n# every keyPruneInterval keys, prune the hash to maxKeys top keys\nmy $keyPruneInterval = 1500000;\nmy $maxKeys = 5000;\nmy $numOnly = '';\nmy $histogramChar = \"-\";\nmy $unicode = 0;\nmy $tokenize = 0;\n# by default, everything matches (nothing is stripped out)\nmy $matchRegexp = \".\";\n# status and summary statistics\nmy $verbose = 0;\n# how often to give status if verbose\nmy $statInterval = 1.0;\nmy $numPrunes = 0;\n# whether or not to parse input into bins (if data is pre-summarised and we're\n# just presenting results)\nmy $graphValues = \"\";\n\n# variables to support colourised output\nmy $colourisedOutput = 0;\nmy $colourPalette = '0,0,32,35,34';\nmy $regularColour = \"\";\nmy $keyColour = \"\";\nmy $ctColour = \"\";\nmy $pctColour = \"\";\nmy $graphColour = \"\";\n\n# we'll re-use inLine at various times for reading files\nmy $inLine;\n\n# if they want an rcfile, must be first arg\nmy $rcFile = $ENV{\"HOME\"} . \"/.distributionrc\";\nif (@ARGV && $ARGV[0] =~ /^-+r(cfile)*=(.+)$/) { $rcFile = $2; }\n\n# read in rcfile if it exists - it'll just be args\nif (open (IFILE, \"< $rcFile\")) {\n\twhile ($inLine = <IFILE>) {\n\t\tchomp ($inLine);\n\t\t# must put args from rcfile at start so options passed on the\n\t\t# commandline will override them\n\t\tunshift (@ARGV, $inLine);\n\t}\n}\n\n# process input arguments -- any arguments that aren't known switches are stuck\n# onto @extraArgs - note that you can have one or two dashes before the option,\n# and only need the first character. also options that take values and switches\n# can be overloaded, so -c=o -c means use the o character and colourise the\n# output. this can be confusing.\nmy @extraArgs;\nforeach my $arg (@ARGV) {\n\tif ($arg =~ /^-+h(elp)*$/)               { doArgs(); exit 0; }\n\telsif ($arg =~ /^-+w(idth)*=(.+)$/)      { $widthArg = $2; }\n\telsif ($arg =~ /^-+h(eight)*=(.+)$/)     { $heightArg = $2; }\n\telsif ($arg =~ /^-+k(eys)*=(.+)$/)       { $maxKeys = $2; }\n\t# --char takes option...\n\telsif ($arg =~ /^-+c(har)*=(.+)$/)       { $histogramChar = $2; }\n\t# ...--color doesn't.\n\telsif ($arg =~ /^-+c(olor)*$/)           { $colourisedOutput = 1; }\n\t# can pass --graph without option, will default to value/key ordering\n\t# since Unix prefers that for piping-to-sort reasons\n\telsif ($arg =~ /^-+g(raph)*=(.+)$/)      { $graphValues = $2; }\n\telsif ($arg =~ /^-+g(raph)*$/)           { $graphValues = 'vk'; }\n\telsif ($arg =~ /^-+l(ogarithmic)*$/)     { $logarithmic = 2; }\n\t# can pass --numonly without option\n\telsif ($arg =~ /^-+n(umonly)$/)          { $numOnly = 'abs'; }\n\telsif ($arg =~ /^-+n(umonly)*=(.+)$/)    { $numOnly = $2; }\n\t# palette is a comma-separated list of ANSI colour values\n\telsif ($arg =~ /^-+p(alette)*=(.+)$/)    { $colourPalette = $2; $colourisedOutput = 1; }\n\t# size has somewhat complex override semantics including some\n\t# non-obvious ones like if passing --numonly for example\n\telsif ($arg =~ /^-+s(ize)*=(.+)$/)       { $size = $2; }\n\t# tokenize the input based on Perl regexp\n\telsif ($arg =~ /^-+t(okenize)*=(.+)$/)   { $tokenize = $2; }\n\t# match tokens based on Perl regexp\n\telsif ($arg =~ /^-+m(atch)*=(.+)$/)      { $matchRegexp = $2; }\n\telsif ($arg =~ /^-+v(erbose)*$/)         { $verbose = 1; }\n\telse { push (@extraArgs, $arg); }\n}\n\n# variables to support colourised output\nif ($colourisedOutput) {\n\t# input should be comma-separated list of numerals\n\tmy @cp = split (',', $colourPalette);\n\t# add ANSI colour commands around the values - final looks like ^[[32m\n\tfor (my $i=0; $i < scalar @cp; $i++) {\n\t\t$cp[$i] = chr(27) . '[' . $cp[$i] . 'm';\n\t}\n\t($regularColour, $keyColour, $ctColour, $pctColour, $graphColour) = @cp;\n}\n\n# for advanced graphing\nmy $verticalBlocks =   [\"▁\", \"▂\", \"▃\", \"▄\", \"▅\", \"▆\", \"▇\", \"█\"]; # for future?\nmy $partialBlocks =    [\"▏\", \"▎\", \"▍\", \"▌\", \"▋\", \"▊\", \"▉\", \"█\"]; # char=pb\nmy $partialCircles =   [\"◖\", \"●\"]; # char=pc\nmy $partialLines =     [\"╸\", \"╾\", \"━\"]; # char=pl\n\n# some useful substitutions for prettiness\nif ($histogramChar eq \"ba\") { $unicode = 1; $histogramChar = \"▬\"; }\nelsif ($histogramChar eq \"bl\") { $unicode = 1; $histogramChar = \"Ξ\"; }\nelsif ($histogramChar eq \"em\") { $unicode = 1; $histogramChar = \"—\"; }\nelsif ($histogramChar eq \"me\") { $unicode = 1; $histogramChar = \"⋯\"; }\nelsif ($histogramChar eq \"di\") { $unicode = 1; $histogramChar = \"♦\"; }\nelsif ($histogramChar eq \"dt\") { $unicode = 1; $histogramChar = \"•\"; }\nelsif ($histogramChar eq \"sq\") { $unicode = 1; $histogramChar = \"□\"; }\n\n# high-bit set means we're not in ASCIIland anymore\nif (ord (substr ($histogramChar, 0, 1)) >= 128) { $unicode = 1; }\n\n# sub-full character width graphing systems\nmy $charWidth = 1;\nmy $graphChars = undef;\nif ($histogramChar eq \"pb\") {\n\t$charWidth = 0.125;\n\t$graphChars = $partialBlocks;\n} elsif ($histogramChar eq \"pl\") {\n\t$charWidth = 0.3334;\n\t$graphChars = $partialLines;\n}\n\n# some useful regexp replacements\nif ($matchRegexp eq 'word') { $matchRegexp = '^[A-Z,a-z]+$'; }\nelsif ($matchRegexp eq 'num')  { $matchRegexp = '^\\d+$'; }\nif ($tokenize eq 'word')    { $tokenize = '[^\\w]'; }\nelsif ($tokenize eq 'white')   { $tokenize = '\\s'; }\n\n# set the heigh/width of the histogram based on size input,\n# this is the lowest level of height/width priority\nif ($size =~ /^f/) {\n\t$width = int (`tput cols` * 0.99);\n\tif ($width < 80) { $width = 80; }\n\t$height = int (`tput lines` - 3);\n\tif ($verbose) { $height -= 4; }\n\tif ($height < 20) { $height = 20; }\n} elsif ($size =~ /^s/) {\n\t$width = 60;\n\t$height = 10;\n} elsif ($size =~ /^m/) {\n\t$width = 100;\n\t$height = 20;\n} elsif ($size =~ /^l/) {\n\t$width = 140;\n\t$height = 35;\n}\n\n# if they passed in --width or --height, they probably meant it moreso than\n# defaults or the --size parameter - so code this last\nif ($widthArg) { $width = $widthArg; }\nif ($heightArg) { $height = $heightArg; }\n\n# maxKeys should be at least a few thousand greater than height to reduce odds\n# of throwing away high-count values that appear sparingly in the data\nif ($maxKeys < $height + 3000) {\n\t$maxKeys = $height + 3000;\n\tprint STDERR \"Updated maxKeys to $maxKeys (height + 3000)\\n\";\n}\n\nmy $nextStat = time() + $statInterval;\nmy $valuesDict;\nmy $totalValues = 0;\nmy $totalObjects = 0;\nmy $graphVal = 0;\nmy $maxVal = 0;\n\n# build the dict/map/hash of input values in one of the three modes of operation\nif ($numOnly) {\n\treadNumerics();\n} elsif ($graphValues) {\n\treadPretalliedTokens();\n} else {\n\treadLinesBuildHash();\n}\n\n# see if there was input\ncheckValuesObjects();\n\nmy $totalKeys;\nmy @sortedKeys;\n\n# if we're just graphing a bunch of numbers, no need to sort\n# the values dict/map/hash\nif ($numOnly) {\n\t# here we sort on KEYS not VALUES like other cases\n\t@sortedKeys = sortKeysByKey();\n\n\t# we graph everything we're given - throw away nothing! this overrides\n        # --height or --size options! it is the highest priority height directive\n\t$height = $totalObjects;\n} else {\n\t# build the sorted dict/map/hash\n\t@sortedKeys = sortKeysByValueFrequency();\n\t$maxVal = $valuesDict->{$sortedKeys[0]};\n}\n\n# if there aren't height # of distinct values, choose the number\n# of values so the loop later on doesn't have to check for special\n# cases\n$totalKeys = scalar @sortedKeys;\nif ($totalKeys < $height) { $height = $totalKeys; }\n\n# for logarithmic graphs\nmy $maxLog = 0;\nif ($logarithmic) {\n\t$maxLog = log($maxVal);\n}\n\nmy $i;\nmy $j;\nmy $keyText;\nmy $ctText;\nmy $pctText;\nmy $preBarLen;\nmy $barWidth;\nmy $maxPreBarLen = 0;\nmy $maxKeyLen = 0;\n\n# here is the complex part - read it carefully\nfor ($i = 0; $i < $height; $i++) {\n\t# print the i'th most-common key\n\t$keyText->[$i] = $sortedKeys[$i];\n\n\t# how many times this key occurred in the input\n\tmy $count = $valuesDict->{$sortedKeys[$i]};\n\n\t# determine the bar width based on key occurence\n\tif ($logarithmic) {\n\t\tif ($count > 0) {\n\t\t\t$barWidth->[$i] = log($count) / $maxLog;\n\t\t} else {\n\t\t\t$barWidth->[$i] = 0;\n\t\t}\n\t} else {\n\t\t$barWidth->[$i] = $count / $maxVal;\n\t}\n\n\t# determine the percent of key frequency\n\tmy $percentile = $count / $totalValues * 100;\n\n\t# graph axis labels, really\n\t$ctText->[$i] = sprintf (\"%d\", $count);\n\t$pctText->[$i] = sprintf (\"(%3.02f%%)\", $percentile);\n\t$preBarLen = length ($ctText->[$i]) + length ($pctText->[$i]);\n\n\t# determine the longest key name and longest count/percent text for\n\t# aligning the output\n\tif ($preBarLen > $maxPreBarLen) { $maxPreBarLen = $preBarLen; }\n\tif (length ($sortedKeys[$i]) > $maxKeyLen) { $maxKeyLen = length ($sortedKeys[$i]); }\n}\n\nmy $endTime = time() * 1000;\nmy $totalMillis = sprintf (\"%.2f\", ($endTime - $startTime));\n\n# TODO: Collect stats on histogram keys, like how many times maxKeys was\n# reached and pruned, and present them here. For now that seems complicated\n# for the end-user, so I'll wait until there's a feature request\nif ($verbose) {\n\tprint STDERR \"tokens/lines examined: \" . addCommas($totalObjects) . \"    \\n\";\n\tprint STDERR \" tokens/lines matched: \" . addCommas($totalValues) . \"\\n\";\n\tprint STDERR \"       histogram keys: \" . addCommas($totalKeys) . \"\\n\";\n\tprint STDERR \"              runtime: \" . addCommas($totalMillis) . \"ms\\n\";\n}\n\n# almost done now!\noutputGraph();\n\nexit 0;\n\n# --------------------------------------------------------------------------- #\n#                                 subroutines\n# --------------------------------------------------------------------------- #\n\n# get the keys ordered - we'll only print the most common keys\nsub sortKeysByValueFrequency {\n\t# sort first by the value of a key, then by the key itself in case of a tie.\n\t# this allows us to create deterministic sorts when we have multiple entries\n\t# in our histogram with the same frequency. particularly important given that\n\t# perl intentionally randomizes the order of dictionary keys, so not even a\n\t# stable sort would save us.\n\tmy @sortedKeys = reverse sort { int($valuesDict->{$a}) <=> int($valuesDict->{$b}) || $a cmp $b } keys %{$valuesDict};\n\treturn @sortedKeys;\n}\n\n# keep only the most maxKeys keys\nsub pruneKeys {\n\tmy $newDict;\n\tmy $numKeysTransferred = 0;\n\tforeach my $key (&sortKeysByValueFrequency) {\n\t\t$newDict->{$key} = $valuesDict->{$key};\n\t\t$numKeysTransferred++;\n\t\tlast if ($numKeysTransferred > $maxKeys);\n\t}\n\t$valuesDict = $newDict;\n\t$numPrunes++;\n}\n\n# get the keys ordered simply by key\nsub sortKeysByKey {\n\tmy @sortedKeys = sort { int($a) <=> int($b) } keys %{$valuesDict};\n\treturn @sortedKeys;\n}\n\n# here we just pull in a stream of numerics and graph them, optionally graphing\n# the difference between each pair of values\nsub readNumerics {\n\t# monotonically-increasing pairs, must have at least one value\n\tmy $lastVal = undef;\n\n\twhile ($inLine = <STDIN>) {\n\t\tchomp ($inLine);\n\t\tif ($numOnly =~ /^m/i || $numOnly =~ /^d/i) {\n\t\t\tif (defined $lastVal) {\n\t\t\t\t$graphVal = $inLine - $lastVal;\n\t\t\t\t$totalValues += $graphVal;\n\t\t\t\t$totalObjects++;\n\t\t\t}\n\t\t\t$lastVal = $inLine;\n\t\t} else {\n\t\t\t$graphVal= $inLine;\n\t\t\t$totalValues += $inLine;\n\t\t\t$totalObjects++;\n\t\t}\n\n\t\tif ($graphVal > $maxVal) { $maxVal = $graphVal; }\n\n\t\t# we just build a list where the keys are line num and values are the\n\t\t# value\n\t\tif ($totalObjects > 0) {\n\t\t\t$valuesDict->{$totalObjects} = $graphVal;\n\t\t}\n\t}\n}\n\n# read in lines and build dict/map/hash object from it\nsub readLinesBuildHash {\n\tmy $pruneObjects = 0;\n\twhile ($inLine = <STDIN>) {\n\t\tchomp($inLine);\n\t\tif ($tokenize) {\n\t\t\t# in this case we break the line into tokens and tally them\n\t\t\tforeach my $lineToken (split (/$tokenize/, $inLine)) {\n\t\t\t\t$totalObjects++;\n\t\t\t\tif ($lineToken =~ /$matchRegexp/) {\n\t\t\t\t\t$valuesDict->{$lineToken}++;\n\t\t\t\t\t$totalValues++;\n\t\t\t\t\t$pruneObjects++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t# in this case the entire line is the token to be tallied\n\t\t\t$totalObjects++;\n\t\t\tif ($inLine =~ /$matchRegexp/) {\n\t\t\t\t$valuesDict->{$inLine}++;\n\t\t\t\t$totalValues++;\n\t\t\t\t$pruneObjects++;\n\t\t\t}\n\t\t}\n\t\tif ($verbose && time() > $nextStat) {\n\t\t\tprint STDERR \"tokens/lines examined: \" . addCommas($totalObjects) . \"... ; hash prunes: $numPrunes\" . chr(13);\n\t\t\t$nextStat = time() + $statInterval;\n\t\t}\n\t\tif ($pruneObjects >= $keyPruneInterval) {\n\t\t\tpruneKeys();\n\t\t\t$pruneObjects = 0;\n\t\t}\n\t}\n}\n\n# here is the case where we don't need to put the input into bins and tally -\n# the data is pre-tallied for us\nsub readPretalliedTokens {\n\twhile ($inLine = <STDIN>) {\n\t\tchomp ($inLine);\n\t\tif ($graphValues eq 'vk') {\n\t\t\tif ($inLine =~ /^\\s*(\\d+)\\s+(.+)$/) {\n\t\t\t\t$valuesDict->{$2} += $1;\n\t\t\t\t$totalValues += $1;\n\t\t\t\tif ($1 > $maxVal) { $maxVal = $1; }\n\t\t\t\t$totalObjects++;\n\t\t\t} else {\n\t\t\t\tprint STDERR \" E Input malformed+discarded (perhaps pass -g=kv?): $inLine\\n\";\n\t\t\t}\n\t\t} elsif ($graphValues eq 'kv') {\n\t\t\tif ($inLine =~ /^(.+?)\\s+(\\d+)$/) {\n\t\t\t\t$valuesDict->{$1} += $2;\n\t\t\t\t$totalValues += $2;\n\t\t\t\tif ($2 > $maxVal) { $maxVal = $2; }\n\t\t\t\t$totalObjects++;\n\t\t\t} else {\n\t\t\t\tprint STDERR \" E Input malformed+discarded (perhaps pass -g=vk?): $inLine\\n\";\n\t\t\t}\n\t\t}\n\t}\n}\n\n# see if there was input\nsub checkValuesObjects {\n\t# the input may be empty. or we may have been too strict on the\n\t# matching regexp passed in. either way, we were left with nothing.\n\tif ($totalValues == 0) {\n\t\tif ($totalObjects > 0) {\n\t\t\tprint STDERR \"All input filtered! \";\n\t\t} else {\n\t\t\tprint STDERR \"No input! \";\n\t\t}\n\t\tprint STDERR \"No histogram for you. Sorry?\\n\";\n\t\texit 255;\n\t}\n}\n\n# make a number filled with commas - humans hate to see a number like\n# 18008675309. is that 180M or 1.8B? look again. 18B.\nsub addCommas {\n\tmy $theNumber = shift;\n\t$theNumber = reverse $theNumber;\n\t$theNumber =~ s<(\\d\\d\\d)(?=\\d)(?!\\d*\\.)><$1,>g;\n\treturn reverse $theNumber;\n}\n\n# the following arrays, hashes, variables must be correct for this to work\n# keyText->[]  - list of the keys\n# pctText->[]  - list of the percents\n# ctText->[]   - list of the counts\n# barWidth->[] - list of the widths of the bars\nsub outputGraph {\n\t# print a header with alignment from key names\n\tfor ($j = 4; $j <= $maxKeyLen; $j++) { print STDERR \" \"; }\n\tprint STDERR \"Key\";\n\tprint STDERR \"|Ct (Pct)\";\n\tfor ($j = 7; $j <= $maxPreBarLen; $j++) { print STDERR \" \"; }\n\tprint STDERR \"Histogram\";\n\n\t# get ready for the output, but sorting gets hosed if we print the\n\t# colour code before the key, so put it on the line before\n\tprint STDERR \"$keyColour\\n\";\n\n\t# amount of other output reduces possible size of bar - alas\n\tmy $maxBarWidth = $width - $maxPreBarLen - $maxKeyLen - 4;\n\n\tfor ($i = 0; $i < $height; $i++) {\n\t\t# first the key that we aggregated\n\t\tfor ($j = length ($keyText->[$i]); $j < $maxKeyLen; $j++) { print \" \"; }\n\t\tprint $keyText->[$i];\n\t\tprint $regularColour;\n\t\t# alignment\n\t\t# separater between keys and count/pct\n\t\tprint \"|\";\n\t\tprint $ctColour;\n\t\tprint $ctText->[$i] . \" \";\n\t\tprint $pctColour;\n\t\tprint $pctText->[$i];\n\n\t\t# spaces 'til time to print the bar\n\t\tfor ($j = length ($ctText->[$i]) + length ($pctText->[$i]); $j <= $maxPreBarLen; $j++) { print \" \"; }\n\n\t\tprint $graphColour;\n\t\tfor ($j = 0; $j < int ($barWidth->[$i] * $maxBarWidth); $j++) {\n\t\t\tif ($charWidth < 1) {\n\t\t\t\t# print out maximum-width character (always last in array)\n\t\t\t\tprint $graphChars->[scalar @$graphChars - 1];\n\t\t\t} else {\n\t\t\t\t# we're printing regular non-unicode characters\n\t\t\t\tif (length ($histogramChar) > 1 && !$unicode) {\n\t\t\t\t\t# but still we have >1 byte! so print initial byte\n\t\t\t\t\t# for all but the last character (printed outside loop)\n\t\t\t\t\tprint substr ($histogramChar, 0, 1);\n\t\t\t\t} else {\n\t\t\t\t\tprint $histogramChar;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t# print one too many bar characters so we always see something\n\t\tif ($charWidth < 1) {\n\t\t\t# if we have partial-width characters, get higher resolution\n\t\t\tmy $remainder = ($barWidth->[$i] * $maxBarWidth) - int ($barWidth->[$i] * $maxBarWidth);\n\t\t\tmy $whichChar = int ($remainder / $charWidth);\n\t\t\tif ($barWidth->[$i] * $maxBarWidth > $charWidth) {\n\t\t\t\t# we have more than charWidth remainder, so print out a\n\t\t\t\t# remainder portion\n\t\t\t\tprint $graphChars->[$whichChar];\n\t\t\t} else {\n\t\t\t\t# we had minimum remainder, so print minimum-width\n\t\t\t\t# character just print the minimum-width portion\n\t\t\t\tprint $graphChars->[0];\n\t\t\t}\n\t\t} else {\n\t\t\t# we're printing regular non-unicode characters\n\t\t\tif (length ($histogramChar) > 1 && !$unicode) {\n\t\t\t\t# but still we have >1 byte! so print final byte of input string\n\t\t\t\tprint substr ($histogramChar, -1, 1);\n\t\t\t} else {\n\t\t\t\tprint $histogramChar;\n\t\t\t}\n\t\t}\n\n\t\t# FIXME: even with all these colour-printing antics, still one key will\n\t\t# be printed with the wrong colour on sorted output most of the time,\n\t\t# but i have no idea how to fix this other than to implement sorting of\n\t\t# the output within the script itself.\n\t\tif ($i == $height - 1) {\n\t\t\t# put the terminal back into a normal-colour mode on last entry\n\t\t\tprint \"$regularColour\\n\";\n\t\t} else {\n\t\t\t# we do these antics of printing $keyColour on the line before\n\t\t\t# the key so that piping output to sort will work\n\t\t\tprint \"$keyColour\\n\";\n\t\t}\n\t}\n}\n\n# usage\nsub doArgs {\n\tprint \"\\n\";\n\tprint \"usage: <commandWithOutput> | $0\\n\";\n\tprint \"         [--rcfile=<rcFile>]\\n\";\n\tprint \"         [--size={sm|med|lg|full} | --width=<width> --height=<height>]\\n\";\n\tprint \"         [--color] [--palette=r,k,c,p,g]\\n\";\n\tprint \"         [--tokenize=<tokenChar>]\\n\";\n\tprint \"         [--graph[=[kv|vk]] [--numonly[=derivative,diff|abs,absolute,actual]]\\n\";\n\tprint \"         [--char=<barChars>|<substitutionString>]\\n\";\n\tprint \"         [--help] [--verbose]\\n\";\n\tprint \"  --keys=K       every $keyPruneInterval values added, prune hash to K keys (default 5000)\\n\";\n\tprint \"  --char=C       character(s) to use for histogram character, some substitutions follow:\\n\";\n\tprint \"        pl       Use 1/3-width unicode partial lines to simulate 3x actual terminal width\\n\";\n\tprint \"        pb       Use 1/8-width unicode partial blocks to simulate 8x actual terminal width\\n\";\n\tprint \"        ba       (▬) Bar\\n\";\n\tprint \"        bl       (Ξ) Building\\n\";\n\tprint \"        em       (—) Emdash\\n\";\n\tprint \"        me       (⋯) Mid-Elipses\\n\";\n\tprint \"        di       (♦) Diamond\\n\";\n\tprint \"        dt       (•) Dot\\n\";\n\tprint \"        sq       (□) Square\\n\";\n\tprint \"  --color        colourise the output\\n\";\n\tprint \"  --graph[=G]    input is already key/value pairs. vk is default:\\n\";\n\tprint \"        kv       input is ordered key then value\\n\";\n\tprint \"        vk       input is ordered value then key\\n\";\n\tprint \"  --height=N     height of histogram, headers non-inclusive, overrides --size\\n\";\n\tprint \"  --help         get help\\n\";\n\tprint \"  --logarithmic  logarithmic graph\\n\";\n\tprint \"  --match=RE     only match lines (or tokens) that match this regexp, some substitutions follow:\\n\";\n\tprint \"        word     ^[A-Z,a-z]+\\$ - tokens/lines must be entirely alphabetic\\n\";\n\tprint \"        num      ^\\\\d+\\$        - tokens/lines must be entirely numeric\\n\";\n\tprint \"  --numonly[=N]  input is numerics, simply graph values without labels\\n\";\n\tprint \"        actual   input is just values (default - abs, absolute are synonymous to actual)\\n\";\n\tprint \"        diff     input monotonically-increasing, graph differences (of 2nd and later values)\\n\";\n\tprint \"  --palette=P    comma-separated list of ANSI colour values for portions of the output\\n\";\n\tprint \"                 in this order: regular, key, count, percent, graph. implies --color.\\n\";\n\tprint \"  --rcfile=F     use this rcfile instead of \\$HOME/.distributionrc - must be first argument!\\n\";\n\tprint \"  --size=S       size of histogram, can abbreviate to single character, overridden by --width/--height\\n\";\n\tprint \"        small    40x10\\n\";\n\tprint \"        medium   80x20\\n\";\n\tprint \"        large    120x30\\n\";\n\tprint \"        full     terminal width x terminal height (approximately)\\n\";\n\tprint \"  --tokenize=RE  split input on regexp RE and make histogram of all resulting tokens\\n\";\n\tprint \"        word     [^\\\\w] - split on non-word characters like colons, brackets, commas, etc\\n\";\n\tprint \"        white    \\\\s    - split on whitespace\\n\";\n\tprint \"  --width=N      width of the histogram report, N characters, overrides --size\\n\";\n\tprint \"  --verbose      be verbose\\n\";\n\tprint \"\\n\";\n\tprint \"You can use single-characters options, like so: -h=25 -w=20 -v. You must still include the =\\n\";\n\tprint \"\\n\";\n\tprint \"Samples:\\n\";\n\tprint \"  du -sb /etc/* | $0 --palette=0,37,34,33,32 --graph\\n\";\n\tprint \"  du -sk /etc/* | awk '{print \\$2\\\" \\\"\\$1}' | $0 --graph=kv\\n\";\n\tprint \"  zcat /var/log/syslog*gz | $0 --char=o --tokenize=white\\n\";\n\tprint \"  zcat /var/log/syslog*gz | awk '{print \\$5}'  | $0 --t=word --m-word --h=15 --c=/\\n\";\n\tprint \"  zcat /var/log/syslog*gz | cut -c 1-9        | $0 --width=60 --height=10 --char=em\\n\";\n\tprint \"  find /etc -type f       | cut -c 6-         | $0 --tokenize=/ --w=90 --h=35 --c=dt\\n\";\n\tprint \"  cat /usr/share/dict/words | awk '{print length(\\$1)}' | $0 --c=* --w=50 --h=10 | sort -n\\n\";\n\tprint \"\\n\";\n}\n"
  },
  {
    "path": "distribution.py",
    "content": "#! /usr/bin/env python3\n\n\"\"\"\nGenerate Graphs Directly in the (ASCII- or Unicode-based) Terminal\n\nIf you find yourself typing:\n  [long | list | of | commands | sort | uniq -c | sort -rn]\n\nReplace:\n  [| sort | uniq -c | sort -rn]\n\nWith:\n  [| distribution]\n\nThen bask in the glory of your new-found data visualization. There are other\nuse cases as well.\n\"\"\"\n\nimport math\nimport os\nimport re\nimport shutil\nimport sys\nimport time\nfrom pathlib import Path\n\n\nclass Histogram:\n    \"\"\"\n    Takes the tokenDict built in the InputReader class and goes through it,\n    printing a histogram for each of the highest height entries\n    \"\"\"\n\n    def __init__(self):\n        pass\n\n    def histogram_bar(self, s, histWidth, maxVal, barVal):\n        # given a value and max, return string for histogram bar of the proper\n        # number of characters, including unicode partial-width characters\n        returnBar = \"\"\n\n        # first case is partial-width chars\n        if s.charWidth < 1:\n            zeroChar = s.graphChars[-1]\n        elif len(s.histogramChar) > 1 and not s.unicodeMode:\n            zeroChar = s.histogramChar[0]\n            oneChar = s.histogramChar[1]\n        else:\n            zeroChar = s.histogramChar\n            oneChar = s.histogramChar\n\n        # write out the full-width integer portion of the histogram\n        if s.logarithmic:\n            maxLog = math.log(maxVal)\n            barLog = math.log(barVal) if barVal > 0 else 0\n            intWidth = int(barLog / maxLog * histWidth)\n            remainderWidth = (barLog / maxLog * histWidth) - intWidth\n        else:\n            intWidth = int(barVal * 1.0 / maxVal * histWidth)\n            remainderWidth = (barVal * 1.0 / maxVal * histWidth) - intWidth\n\n        # write the zeroeth character intWidth times...\n        returnBar += zeroChar * intWidth\n\n        # we always have at least one remaining char for histogram - if\n        # we have full-width chars, then just print it, otherwise do a\n        # calculation of how much remainder we need to print\n        #\n        # FIXME: The remainder partial char printed does not take into\n        # account logarithmic scale (can humans notice?).\n        if s.charWidth == 1:\n            returnBar += oneChar\n        elif s.charWidth < 1:\n            # this is high-resolution, so figure out what remainder we\n            # have to represent\n            if remainderWidth > s.charWidth:\n                whichChar = int(remainderWidth / s.charWidth)\n                returnBar += s.graphChars[whichChar]\n\n        return returnBar\n\n    def write_hist(self, s, tokenDict):\n        maxTokenLen = 0\n        outputDict = {}\n\n        numItems = 0\n        maxVal = 0\n        s.totalValues = int(s.totalValues)\n\n        # given a dict, create a comparison tuple that sorts first by the value of a key,\n        # then by the key itself in case of a tie. this allows us to create deterministic sorts\n        # when we have multiple entries in our histogram with the same frequency.\n        def value_key_compare(dict):\n            return lambda key: (dict.get(key), key)\n\n        for k in sorted(tokenDict, key=value_key_compare(tokenDict), reverse=True):\n            # can't remember what feature \"if k:\" adds - i think there's an\n            # off-by-one death the script sometimes suffers without it.\n            if k:\n                outputDict[k] = tokenDict[k]\n                if len(str(k)) > maxTokenLen:\n                    maxTokenLen = len(str(k))\n                if outputDict[k] > maxVal:\n                    maxVal = outputDict[k]\n                numItems += 1\n                if numItems >= s.height:\n                    break\n\n        s.endTime = int(time.time() * 1000)\n        totalMillis = s.endTime - s.startTime\n        if s.verbose:\n            sys.stderr.write(f\"tokens/lines examined: {s.totalObjects:,d}\\n\")\n            sys.stderr.write(f\" tokens/lines matched: {s.totalValues:,d}\\n\")\n            sys.stderr.write(f\"       histogram keys: {len(tokenDict):,d}\\n\")\n            sys.stderr.write(f\"              runtime: {totalMillis:,.2f}ms\\n\")\n\n        # the first entry will determine these values\n        maxValueWidth = 0\n        maxPctWidth = 0\n        sortedOutput = sorted(\n            outputDict, key=value_key_compare(outputDict), reverse=True\n        )\n        for i in range(0, len(sortedOutput)):\n            k = sortedOutput[i]\n            # can't remember what feature \"if k:\" adds - i think there's an\n            # off-by-one death the script sometimes suffers without it.\n            if k:\n                if maxValueWidth == 0:\n                    testString = f\"{outputDict[k]}\"\n                    maxValueWidth = len(testString)\n                    testString = f\"({outputDict[k] * 1.0 / s.totalValues * 100:2.2f}%)\"\n                    maxPctWidth = len(testString)\n\n                    # we always output a single histogram char at the end, so\n                    # we output one less than actual number here\n                    histWidth = (\n                        s.width\n                        - (maxTokenLen + 1)\n                        - (maxValueWidth + 1)\n                        - (maxPctWidth + 1)\n                        - 1\n                    )\n\n                    # output a header\n                    sys.stderr.write(\"Key\".rjust(maxTokenLen) + \"|\")\n                    sys.stderr.write(\"Ct\".ljust(maxValueWidth) + \" \")\n                    sys.stderr.write(\"(Pct)\".ljust(maxPctWidth) + \" \")\n                    sys.stderr.write(\"Histogram\")\n\n                    # get ready for the output, but sorting gets hosed if we print the\n                    # colour code before the key, so put it on the line before\n                    sys.stderr.write(s.keyColour)\n                    sys.stderr.write(\"\\n\")\n\n                sys.stdout.write(str(k).rjust(maxTokenLen))\n                sys.stdout.write(s.regularColour)\n                sys.stdout.write(\"|\")\n                sys.stdout.write(s.ctColour)\n\n                outVal = f\"{outputDict[k]}\"\n                sys.stdout.write(outVal.rjust(maxValueWidth) + \" \")\n\n                pct = f\"({outputDict[k] * 1.0 / s.totalValues * 100:2.2f}%)\"\n                sys.stdout.write(s.pctColour)\n                sys.stdout.write(pct.rjust(maxPctWidth) + \" \")\n\n                sys.stdout.write(s.graphColour)\n                sys.stdout.write(\n                    self.histogram_bar(s, histWidth, maxVal, outputDict[k])\n                )\n\n                if i == len(sortedOutput) - 1:\n                    # put the terminal back into a normal-colour mode on last entry\n                    sys.stdout.write(s.regularColour)\n                else:\n                    # we do these antics of printing $keyColour on the line before\n                    # the key so that piping output to sort will work\n                    sys.stdout.write(s.keyColour)\n                sys.stdout.write(\"\\n\")\n\n\nclass InputReader:\n    \"\"\"\n    Reads stdin, parses it into a dictionary of key and value is number\n    of appearances of that key in the input - this will also prune the\n    token frequency dict on after a certain number of insertions to\n    prevent OOME on large datasets\n    \"\"\"\n\n    def __init__(self):\n        self.tokenDict = {}\n\n    def prune_keys(self, s):\n        newDict = {}\n        numKeysTransferred = 0\n        for k in sorted(self.tokenDict, key=self.tokenDict.get, reverse=True):\n            if k:\n                newDict[k] = self.tokenDict[k]\n                numKeysTransferred += 1\n                if numKeysTransferred > s.maxKeys:\n                    break\n        self.tokenDict = newDict\n        s.numPrunes += 1\n\n    def tokenize_input(self, s):\n        # how to split the input... typically we split on whitespace or\n        # word boundaries, but the user can specify any regexp\n        if s.tokenize == \"white\":\n            s.tokenize = r\"\\s+\"\n        elif s.tokenize == \"word\":\n            s.tokenize = r\"\\W\"\n\n        # how to match (filter) the input... typically we want either\n        # all-alpha or all-numeric, but again, user can specify\n        if s.matchRegexp == \"word\":\n            s.matchRegexp = r\"^[A-Z,a-z]+$\"\n        elif s.matchRegexp in [\"num\", \"number\"]:\n            s.matchRegexp = r\"^\\d+$\"\n\n        # docs say these are cached, but i got about 2x speed boost\n        # from doing the compile\n        pt = re.compile(s.tokenize)\n        pm = re.compile(s.matchRegexp)\n\n        nextStat = time.time() + s.statInterval\n\n        pruneObjects = 0\n        for line in sys.stdin:\n            line = line.rstrip(\"\\n\")\n            if s.tokenize:\n                for token in pt.split(line):\n                    # user desires to break line into tokens...\n                    s.totalObjects += 1\n                    if pm.match(token):\n                        s.totalValues += 1\n                        pruneObjects += 1\n                        if token in self.tokenDict:\n                            self.tokenDict[token] += 1\n                        else:\n                            self.tokenDict[token] = 1\n            else:\n                # user just wants every line to be a token\n                s.totalObjects += 1\n                if pm.match(line):\n                    s.totalValues += 1\n                    pruneObjects += 1\n                    if line in self.tokenDict:\n                        self.tokenDict[line] += 1\n                    else:\n                        self.tokenDict[line] = 1\n\n            # prune the hash if it gets too large\n            if pruneObjects >= s.keyPruneInterval:\n                self.prune_keys(s)\n                pruneObjects = 0\n\n            if s.verbose and time.time() > nextStat:\n                sys.stderr.write(\n                    f\"tokens/lines examined: {s.totalObjects:,d} ; hash prunes: {s.numPrunes:,d}...\"\n                    + chr(13)\n                )\n                nextStat = time.time() + s.statInterval\n\n    def read_pretallied_tokens(self, s):\n        # the input is already just a series of keys with the frequency of the\n        # keys precomputed, as in \"du -sb\" - vk means the number is first, key\n        # second. kv means key first, number second\n        vk = re.compile(r\"^\\s*(\\d+)\\s+(.+)$\")\n        kv = re.compile(r\"^(.+?)\\s+(\\d+)$\")\n        if s.graphValues == \"vk\":\n            for line in sys.stdin:\n                m = vk.match(line)\n                try:\n                    if m.group(2) in self.tokenDict:\n                        self.tokenDict[m.group(2)] += int(m.group(1))\n                    else:\n                        self.tokenDict[m.group(2)] = int(m.group(1))\n                    s.totalValues += int(m.group(1))\n                    s.totalObjects += 1\n                except Exception:\n                    sys.stderr.write(\n                        f\" E Input malformed+discarded (perhaps pass -g=kv?): {line}\\n\"\n                    )\n        elif s.graphValues == \"kv\":\n            for line in sys.stdin:\n                m = kv.match(line)\n                try:\n                    if m.group(1) in self.tokenDict:\n                        self.tokenDict[m.group(1)] += int(m.group(2))\n                    else:\n                        self.tokenDict[m.group(1)] = int(m.group(2))\n                    s.totalValues += int(m.group(2))\n                    s.totalObjects += 1\n                except Exception:\n                    sys.stderr.write(\n                        f\" E Input malformed+discarded (perhaps pass -g=vk?): {line}\\n\"\n                    )\n\n    def read_numerics(self, s, h):\n        # in this special mode, we print out the histogram here instead\n        # of later - because it's a far simpler histogram without all the\n        # totals, percentages, etc of the real histogram. we're just\n        # showing a graph of a series of numbers\n        lastVal = 0\n        maxVal = 0\n        maxWidth = 0\n        sumVal = 0\n        outList = []\n        for line in sys.stdin:\n            try:\n                line = float(line.rstrip())\n            except Exception:\n                line = lastVal\n\n            graphVal = 0\n            if s.numOnly == \"mon\":\n                if s.totalObjects > 0:\n                    graphVal = line - lastVal\n                lastVal = line\n            else:\n                graphVal = line\n\n            if graphVal > maxVal:\n                maxVal = graphVal\n                maxWidth = len(str(graphVal))\n\n            sumVal += int(graphVal)\n\n            if s.totalObjects > 0:\n                outList.append(graphVal)\n            s.totalObjects += 1\n\n        # simple graphical output\n        for k in outList:\n            sys.stdout.write(s.keyColour)\n            sys.stdout.write(str(int(k)).rjust(maxWidth))\n            pct = f\"({float(k) / float(sumVal) * 100:2.2f}%)\"\n            sys.stdout.write(s.pctColour)\n            sys.stdout.write(pct.rjust(9) + \" \")\n            sys.stdout.write(s.graphColour)\n            sys.stdout.write(\n                h.histogram_bar(s, s.width - 11 - maxWidth, maxVal, k) + \"\\n\"\n            )\n            sys.stdout.write(s.regularColour)\n\n\nclass Settings:\n    def __init__(self):\n        self.totalMillis = 0\n        self.startTime = int(time.time() * 1000)\n        self.endTime = 0\n        self.widthArg = 0\n        self.heightArg = 0\n        self.width = 80\n        self.height = 15\n        self.histogramChar = \"-\"\n        self.colourisedOutput = False\n        self.logarithmic = False\n        self.numOnly = \"XXX\"\n        self.verbose = False\n        self.graphValues = \"\"\n        self.size = \"\"\n        self.tokenize = \"\"\n        # by default, everything matches (nothing is stripped out)\n        self.matchRegexp = \".\"\n        # how often to give status if verbose\n        self.statInterval = 1.0\n        self.numPrunes = 0\n        # for colourised output\n        self.colourPalette = \"0,0,32,35,34\"\n        self.regularColour = \"\"\n        self.keyColour = \"\"\n        self.ctColour = \"\"\n        self.pctColour = \"\"\n        self.graphColour = \"\"\n        # for stats\n        self.totalObjects = 0\n        self.totalValues = 0\n        # every keyPruneInterval keys, prune the hash to maxKeys top keys\n        self.keyPruneInterval = 1500000\n        self.maxKeys = 5000\n        # for advanced graphing\n        self.unicodeMode = False\n        self.charWidth = 1\n        self.graphChars = []\n        self.partialBlocks = [\"▏\", \"▎\", \"▍\", \"▌\", \"▋\", \"▊\", \"▉\", \"█\"]  # char=pb\n        self.partialLines = [\"╸\", \"╾\", \"━\"]  # char=hl\n\n        # rcfile grabbing/parsing if specified\n        if len(sys.argv) > 1 and \"--rcfile\" in sys.argv[1]:\n            rcFile = sys.argv[1].split(\"=\")[1]\n            rcFile = os.path.expanduser(rcFile)\n        else:\n            rcFile = os.environ.get(\"HOME\") + \"/.distributionrc\"\n\n        # parse opts from the rcFile if it exists\n        try:\n            with open(rcFile) as f:\n                rcfileOptList = f.readlines()\n                for rcOpt in rcfileOptList:\n                    rcOpt = rcOpt.rstrip().split(\"#\")[0]\n                    if rcOpt:\n                        sys.argv.insert(0, rcOpt)\n        except OSError:\n            # don't die or in fact do anything if rcfile doesn't exist\n            pass\n\n        # manual argument parsing easier than getopts IMO\n        for arg in sys.argv:\n            if arg in (\"-h\", \"--help\"):\n                doUsage(self)\n                sys.exit(0)\n            elif arg in (\"-c\", \"--color\", \"--colour\"):\n                self.colourisedOutput = True\n            elif arg in (\"-g\", \"--graph\"):\n                # can pass --graph without option, will default to value/key ordering\n                # since Unix prefers that for piping-to-sort reasons\n                self.graphValues = \"vk\"\n            elif arg in (\"-l\", \"--logarithmic\"):\n                self.logarithmic = True\n            elif arg in (\"-n\", \"--numonly\"):\n                self.numOnly = \"abs\"\n            elif arg in (\"-v\", \"--verbose\"):\n                self.verbose = True\n            else:\n                argList = arg.split(\"=\", 1)\n                if argList[0] in (\"-w\", \"--width\"):\n                    self.widthArg = int(argList[1])\n                elif argList[0] in (\"-h\", \"--height\"):\n                    self.heightArg = int(argList[1])\n                elif argList[0] in (\"-k\", \"--keys\"):\n                    self.maxKeys = int(argList[1])\n                elif argList[0] in (\"-c\", \"--char\"):\n                    self.histogramChar = argList[1]\n                elif argList[0] in (\"-g\", \"--graph\"):\n                    self.graphValues = argList[1]\n                elif argList[0] in (\"-n\", \"--numonly\"):\n                    self.numOnly = argList[1]\n                elif argList[0] in (\"-p\", \"--palette\"):\n                    self.colourPalette = argList[1]\n                    self.colourisedOutput = True\n                elif argList[0] in (\"-s\", \"--size\"):\n                    self.size = argList[1]\n                elif argList[0] in (\"-t\", \"--tokenize\"):\n                    self.tokenize = argList[1]\n                elif argList[0] in (\"-m\", \"--match\"):\n                    self.matchRegexp = argList[1]\n\n        # first, size, which might be further overridden by width/height later\n        if self.size in (\"full\", \"fl\", \"f\"):\n            # tput will tell us the term width/height even if input is stdin\n            self.width, self.height = shutil.get_terminal_size()\n            # convert to numerics from string\n            self.width = int(self.width)\n            self.height = int(self.height) - 3\n            # need room for the verbosity output\n            if self.verbose:\n                self.height -= 4\n            # in case tput went all bad, ensure some minimum size\n            self.width = max(self.width, 40)\n            self.height = max(self.height, 10)\n        elif self.size in (\"small\", \"sm\", \"s\"):\n            self.width = 60\n            self.height = 10\n        elif self.size in (\"medium\", \"med\", \"m\"):\n            self.width = 100\n            self.height = 20\n        elif self.size in (\"large\", \"lg\", \"l\"):\n            self.width = 140\n            self.height = 35\n\n        # synonyms \"monotonically-increasing\": derivative, difference, delta, increasing\n        # so all \"d\" \"i\" and \"m\" words will be graphing those differences\n        if self.numOnly[0] in (\"d\", \"i\", \"m\"):\n            self.numOnly = \"mon\"\n        # synonyms \"actual values\": absolute, actual, number, normal, noop,\n        # so all \"a\" and \"n\" words will graph straight up numbers\n        if self.numOnly[0] in (\"a\", \"n\"):\n            self.numOnly = \"abs\"\n\n        # override variables if they were explicitly given\n        if self.widthArg != 0:\n            self.width = self.widthArg\n        if self.heightArg != 0:\n            self.height = self.heightArg\n\n        # maxKeys should be at least a few thousand greater than height to reduce odds\n        # of throwing away high-count values that appear sparingly in the data\n        if self.maxKeys < self.height + 3000:\n            self.maxKeys = self.height + 3000\n            if self.verbose:\n                sys.stderr.write(f\"Updated maxKeys to {self.maxKeys} (height + 3000)\\n\")\n\n        # colour palette\n        if self.colourisedOutput:\n            cl = self.colourPalette.split(\",\")\n            # ANSI color code is ESC+[+NN+m where ESC=chr(27), [ and m are\n            # the literal characters, and NN is a two-digit number, typically\n            # from 31 to 37 - why is this knowledge still useful in 2014?\n            cl = [chr(27) + \"[\" + e + \"m\" for e in cl]\n            (\n                self.regularColour,\n                self.keyColour,\n                self.ctColour,\n                self.pctColour,\n                self.graphColour,\n            ) = cl\n\n        # some useful ASCII-->utf-8 substitutions\n        if self.histogramChar == \"ba\":\n            self.unicodeMode = True\n            self.histogramChar = \"▬\"\n        elif self.histogramChar == \"bl\":\n            self.unicodeMode = True\n            self.histogramChar = \"Ξ\"\n        elif self.histogramChar == \"em\":\n            self.unicodeMode = True\n            self.histogramChar = \"—\"\n        elif self.histogramChar == \"me\":\n            self.unicodeMode = True\n            self.histogramChar = \"⋯\"\n        elif self.histogramChar == \"di\":\n            self.unicodeMode = True\n            self.histogramChar = \"♦\"\n        elif self.histogramChar == \"dt\":\n            self.unicodeMode = True\n            self.histogramChar = \"•\"\n        elif self.histogramChar == \"sq\":\n            self.unicodeMode = True\n            self.histogramChar = \"□\"\n\n        # sub-full character width graphing systems\n        if self.histogramChar == \"pb\":\n            self.charWidth = 0.125\n            self.graphChars = self.partialBlocks\n        elif self.histogramChar == \"pl\":\n            self.charWidth = 0.3334\n            self.graphChars = self.partialLines\n\n        # detect whether the user has passed a multibyte unicode character directly as the histogram char\n        if ord(self.histogramChar[0]) >= 128:\n            self.unicodeMode = True\n\n\ndef doUsage(s):\n    print(\n        f\"\"\"\nusage: <commandWithOutput> | {scriptName}\n         [--rcfile=<rcFile>]\n         [--size={{sm|med|lg|full}} | --width=<width> --height=<height>]\n         [--color] [--palette=r,k,c,p,g]\n         [--tokenize=<tokenChar>]\n         [--graph[=[kv|vk]] [--numonly[=derivative,diff|abs,absolute,actual]]\n         [--char=<barChars>|<substitutionString>]\n         [--help] [--verbose]\n  --keys=K       every {s.keyPruneInterval} values added, prune hash to K keys (default 5000)\n  --char=C       character(s) to use for histogram character, some substitutions follow:\n        pl       Use 1/3-width unicode partial lines to simulate 3x actual terminal width\n        pb       Use 1/8-width unicode partial blocks to simulate 8x actual terminal width\n        ba       (▬) Bar\n        bl       (Ξ) Building\n        em       (—) Emdash\n        me       (⋯) Mid-Elipses\n        di       (♦) Diamond\n        dt       (•) Dot\n        sq       (□) Square\n  --color        colourise the output\n  --graph[=G]    input is already key/value pairs. vk is default:\n        kv       input is ordered key then value\n        vk       input is ordered value then key\n  --height=N     height of histogram, headers non-inclusive, overrides --size\n  --help         get help\n  --logarithmic  logarithmic graph\n  --match=RE     only match lines (or tokens) that match this regexp, some substitutions follow:\n        word     ^[A-Z,a-z]+\\\\$ - tokens/lines must be entirely alphabetic\n        num      ^\\\\d+\\\\$        - tokens/lines must be entirely numeric\n  --numonly[=N]  input is numerics, simply graph values without labels\n        actual   input is just values (default - abs, absolute are synonymous to actual)\n        diff     input monotonically-increasing, graph differences (of 2nd and later values)\n  --palette=P    comma-separated list of ANSI colour values for portions of the output\n                 in this order: regular, key, count, percent, graph. implies --color.\n  --rcfile=F     use this rcfile instead of ~/.distributionrc - must be first argument!\n  --size=S       size of histogram, can abbreviate to single character, overridden by --width/--height\n        small    40x10\n        medium   80x20\n        large    120x30\n        full     terminal width x terminal height (approximately)\n  --tokenize=RE  split input on regexp RE and make histogram of all resulting tokens\n        word     [^\\\\w] - split on non-word characters like colons, brackets, commas, etc\n        white    \\\\s    - split on whitespace\n  --width=N      width of the histogram report, N characters, overrides --size\n  --verbose      be verbose\n\nYou can use single-characters options, like so: -h=25 -w=20 -v. You must still include the =\n\nSamples:\n  du -sb /etc/* | {scriptName} --palette=0,37,34,33,32 --graph\n  du -sk /etc/* | awk '{{print $2\\\" \\\"$1}}' | {scriptName} --graph=kv\n  zcat /var/log/syslog*gz | {scriptName} --char=o --tokenize=white\n  zcat /var/log/syslog*gz | awk '{{print $5}}'  | {scriptName} -t=word -m-word -h=15 -c=/\n  zcat /var/log/syslog*gz | cut -c 1-9        | {scriptName} -width=60 -height=10 -char=em\n  find /etc -type f       | cut -c 6-         | {scriptName} -tokenize=/ -w=90 -h=35 -c=dt\n  cat /usr/share/dict/words | awk '{{print length($1)}}' | {scriptName} -c=* -w=50 -h=10 | sort -n\n\"\"\"\n    )\n\n\n# simple argument parsing and call top-level routines\ndef main():\n    # instantiate our classes\n    s = Settings()\n    i = InputReader()\n    h = Histogram()\n\n    if s.graphValues:\n        # user passed g=vk or g=kv\n        i.read_pretallied_tokens(s)\n    elif s.numOnly != \"XXX\":\n        # s.numOnly was specified by the user\n        i.read_numerics(s, h)\n        # read_numerics will have output a graph already, so exit\n        sys.exit(0)\n    else:\n        # this is the original behaviour of distribution\n        i.tokenize_input(s)\n\n    h.write_hist(s, i.tokenDict)\n\n\n# what is this magic?\nscriptName = str(Path(sys.argv[0]).name)\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "distributionrc",
    "content": "# put this file at $HOME/.distributionrc or specify it as --rcfile=<location>\n# AS THE FIRST ARGUMENT to the script\n#\n# options for the distribution program can be specified one per line exactly as\n# you'd specify them on the commandline. options in this file are overridden by\n# the commandline options passed\n#\n# do not try to specify the same option twice in this file, you'll probably be\n# surprised by the reverse-order of overrides\n\n# obvious options?\n--color\n#--size=full\n\n# two-char choice\n--char=-o\n\n# cool unicode partial-width characters\n# --char=pb\n# other interesting-but-unusual graph bar choices\n#--char=◵\n#--char=■\n#--char=◣\n#--char=░\n#--char=▞\n\n# ANSI colour palette, in this order:\n# regular, key, count, percent, graph\n--palette=0,32,34,35,37\n\n"
  },
  {
    "path": "tests/runTests.sh",
    "content": "#!/bin/sh\n\n# make sure env is setup proper\nif [ \"xxx$distribution\" == \"xxx\" ] ; then\n\techo \"To run tests, first export distribution=<pathToDistributionToTest>\"\n\texit 255\nfi\n\ngetopts \"v\" verbose\n\n# the tests\necho \"\"\nprintf \"Running test: 1. \"\ncat stdin.01.txt | $distribution --rcfile=../distributionrc --graph --height=35 --width=120 --char=dt --color --verbose > stdout.01.actual.txt 2> stderr.01.actual.txt\n\nprintf \"2. \"\ncat stdin.02.txt | awk '{print $4\" \"$5}' | $distribution --rcfile=../distributionrc -s=med --width=110 --tokenize=word --match=word -v -c > stdout.02.actual.txt 2> stderr.02.actual.txt\n\nprintf \"3. \"\ngrep modem stdin.02.txt | awk '{print $1}' | $distribution --rcfile=../distributionrc --width=110 -h=15 -c='|' -v -c 2> stderr.03.actual.txt | sort > stdout.03.actual.txt\n\nprintf \"4. \"\ncat stdin.03.txt | $distribution --rcfile=../distributionrc --size=large --height=8 --width=60 -t=/ --palette=0,31,33,35,37 -c='()' > stdout.04.actual.txt 2> stderr.04.actual.txt\n\nprintf \"5. \"\ncat stdin.03.txt | $distribution --rcfile=../distributionrc -c=pc -w=48 --tokenize=word --match=num --size=large --verbose 2> stderr.05.actual.txt | sort -n > stdout.05.actual.txt\n\nprintf \"6. \"\n# generate a large list of deterministic but meaningless numbers\n(( i=0 )) ; while [[ $i -lt 3141592 ]] ; do\n\techo $(( i ^ (i+=17) ))\ndone | cut -c 2-6 | $distribution --rcfile=../distributionrc --width=124 --height=29 -p=0,32,34,36,31 -c=^ -v > stdout.06.actual.txt 2> stderr.06.actual.txt\n\nprintf \"7. \"\ncat stdin.04.txt | awk '{print $8}' | $distribution --rcfile=../distributionrc -s=s -w=90 --char=Ξ > stdout.07.actual.txt 2> stderr.07.actual.txt\n\necho \"done.\"\n\n# be sure output is proper\nerr=0\nprintf \"Comparing results: \"\nfor i in 01 02 03 04 05 06 07 ; do\n\tprintf \"$i. \"\n\tdiff -w stdout.$i.expected.txt stdout.$i.actual.txt\n\tif [ $? -ne 0 ]; then\n\t\terr=1\n\tfi\n\n\t# when in verbose mode, ignore any \"runtime lines, since those may differ by\n\t# milliseconds from machine to machine. Also ignore any lines with \"^M\" markers,\n\t# which are line-erase signals used for updating the screen interactively, and\n\t# thus don't need to be stored or compared.\n\tif [ \"$verbose\" = \"v\" ]; then\n\t\tdiff -w -I \"runtime:\" -I \"\r\" stderr.$i.expected.txt stderr.$i.actual.txt\n\tfi\ndone\n\necho \"done.\"\n\n# clean up\nrm stdout.*.actual.txt stderr.*.actual.txt\n\nexit $err\n"
  },
  {
    "path": "tests/stderr.01.expected.txt",
    "content": "tokens/lines examined: 279    \n tokens/lines matched: 17,444,532\n       histogram keys: 279\n              runtime: 1.52ms\n                   Key|Ct (Pct)         Histogram\u001b[32m\n"
  },
  {
    "path": "tests/stderr.02.expected.txt",
    "content": "tokens/lines examined: 5,480    \n tokens/lines matched: 1,104\n       histogram keys: 144\n              runtime: 6.19ms\n         Key|Ct (Pct)     Histogram\u001b[32m\n"
  },
  {
    "path": "tests/stderr.03.expected.txt",
    "content": "tokens/lines examined: 29    \n tokens/lines matched: 29\n       histogram keys: 9\n              runtime: 0.31ms\n       Key|Ct (Pct)   Histogram\u001b[32m\n"
  },
  {
    "path": "tests/stderr.04.expected.txt",
    "content": "      Key|Ct (Pct)     Histogram\u001b[31m\n"
  },
  {
    "path": "tests/stderr.05.expected.txt",
    "content": "tokens/lines examined: 1,942    \n tokens/lines matched: 191\n       histogram keys: 11\n              runtime: 2.12ms\nKey|Ct (Pct)    Histogram\u001b[32m\n"
  },
  {
    "path": "tests/stderr.06.expected.txt",
    "content": "tokens/lines examined: 56,960... ; hash prunes: 0\rtokens/lines examined: 113,920... ; hash prunes: 0\rtokens/lines examined: 171,773... ; hash prunes: 0\rtokens/lines examined: 184,800    \n tokens/lines matched: 184,800\n       histogram keys: 68\n              runtime: 3,243.41ms\nKey|Ct (Pct)       Histogram\u001b[32m\n"
  },
  {
    "path": "tests/stderr.07.expected.txt",
    "content": " Key|Ct (Pct)     Histogram\u001b[32m\n"
  },
  {
    "path": "tests/stdin.01.txt",
    "content": "27944\t/etc/acpi\n2981\t/etc/adduser.conf\n10\t/etc/adjtime\n15375\t/etc/alternatives\n395\t/etc/anacrontab\n1096\t/etc/ansible\n800\t/etc/anthy\n95556\t/etc/apache2\n112\t/etc/apg.conf\n3397\t/etc/apm\n16922\t/etc/apparmor\n1597915\t/etc/apparmor.d\n2666\t/etc/apport\n40810\t/etc/apt\n362303\t/etc/ardour2\n144\t/etc/at.deny\n41\t/etc/ati\n1366\t/etc/at-spi2\n5791\t/etc/avahi\n9085\t/etc/avserver.conf\n2076\t/etc/bash.bashrc\n58753\t/etc/bash_completion\n597836\t/etc/bash_completion.d\n356\t/etc/bindresvport.blacklist\n321\t/etc/blkid.conf\n15\t/etc/blkid.tab\n5306\t/etc/bluetooth\n7439\t/etc/bogofilter.cf\n392\t/etc/bonobo-activation\n33\t/etc/brlapi.key\n3143272\t/etc/brltty\n19925\t/etc/brltty.conf\n1878\t/etc/ca-certificates\n6961\t/etc/ca-certificates.conf\n632\t/etc/calendar\n2301\t/etc/chatscripts\n509\t/etc/checkbox.d\n248\t/etc/chromium-browser\n186\t/etc/clutter-imcontext\n699\t/etc/colord.conf\n1122\t/etc/compizconfig\n161\t/etc/ConsoleKit\n57645\t/etc/console-setup\n3300\t/etc/corosync\n429\t/etc/cron.d\n30047\t/etc/cron.daily\n127\t/etc/cron.hourly\n455\t/etc/cron.monthly\n722\t/etc/crontab\n2127\t/etc/cron.weekly\n67\t/etc/crypttab\n14653\t/etc/cups\n8964\t/etc/cupshelpers\n70918\t/etc/dbus-1\n3694\t/etc/dconf\n2969\t/etc/debconf.conf\n11\t/etc/debian_version\n32218\t/etc/default\n604\t/etc/deluser.conf\n55\t/etc/depmod.d\n18191\t/etc/dhcp\n1785\t/etc/dhcp3\n71\t/etc/dictionaries-common\n4730\t/etc/dkms\n352\t/etc/doc-base\n1308\t/etc/dpkg\n1616\t/etc/emacs\n343\t/etc/environment\n389\t/etc/esound\n574\t/etc/firefox\n119862\t/etc/fonts\n1171\t/etc/foomatic\n743\t/etc/fstab\n6\t/etc/fstab.d\n216\t/etc/fuse.conf\n3343\t/etc/gai.conf\n4975\t/etc/gconf\n59\t/etc/gdb\n9937\t/etc/gdm\n10799\t/etc/ghostscript\n41894\t/etc/gimp\n8395\t/etc/ginn\n580\t/etc/gnashpluginrc\n5767\t/etc/gnashrc\n690\t/etc/gnashthumbnailrc\n33126\t/etc/gnome\n200\t/etc/gnome-app-install\n25\t/etc/gnome-settings-daemon\n603\t/etc/gnome-vfs-2.0\n2550\t/etc/gnucash\n1741\t/etc/groff\n977\t/etc/group\n958\t/etc/group-\n40058\t/etc/grub.d\n800\t/etc/gshadow\n789\t/etc/gshadow-\n921\t/etc/gtk-2.0\n1116\t/etc/gtk-3.0\n2105\t/etc/ha.d\n4233\t/etc/haproxy\n6748\t/etc/hddtemp.db\n4728\t/etc/hdparm.conf\n92\t/etc/host.conf\n7\t/etc/hostname\n271\t/etc/hosts\n580\t/etc/hosts.allow\n880\t/etc/hosts.deny\n900\t/etc/hp\n163\t/etc/icedtea-web\n78\t/etc/ifplugd\n202358\t/etc/ImageMagick\n58780\t/etc/init\n143281\t/etc/init.d\n6610\t/etc/initramfs-tools\n1721\t/etc/inputrc\n28\t/etc/insserv\n839\t/etc/insserv.conf\n6\t/etc/insserv.conf.d\n1256\t/etc/iproute2\n853\t/etc/ipsec.conf\n20491\t/etc/ipsec.d\n698\t/etc/ipsec.secrets\n24\t/etc/issue\n17\t/etc/issue.net\n100414\t/etc/java-7-openjdk\n2838\t/etc/kbd\n6035\t/etc/kernel\n91\t/etc/kernel-img.conf\n1309\t/etc/kerneloops.conf\n354\t/etc/ldap\n92934\t/etc/ld.so.cache\n34\t/etc/ld.so.conf\n342\t/etc/ld.so.conf.d\n267\t/etc/legal\n2695\t/etc/libnl-3\n6\t/etc/libpaper.d\n5336\t/etc/libreoffice\n564\t/etc/lightdm\n2570\t/etc/locale.alias\n2819\t/etc/localtime\n8750\t/etc/logcheck\n1475\t/etc/logd.cf\n10551\t/etc/login.defs\n599\t/etc/logrotate.conf\n8279\t/etc/logrotate.d\n6\t/etc/lsb-base\n3279\t/etc/lsb-base-logging.sh\n104\t/etc/lsb-release\n15752\t/etc/ltrace.conf\n111\t/etc/magic\n111\t/etc/magic.mime\n23576\t/etc/mailcap\n449\t/etc/mailcap.order\n5173\t/etc/manpath.config\n416\t/etc/matecomponent-activation\n7780758\t/etc/mateconf\n15409\t/etc/mate-system-tools\n584\t/etc/mate-vfs-2.0\n10862\t/etc/mate-vfs-mime-magic\n440\t/etc/menu\n15646\t/etc/menu-methods\n23958\t/etc/mime.types\n956\t/etc/mke2fs.conf\n11521\t/etc/modprobe.d\n198\t/etc/modules\n535352\t/etc/mono\n13\t/etc/motd\n13899\t/etc/mplayer\n887\t/etc/mtab\n0\t/etc/mtab.fuselock\n624\t/etc/mtools.conf\n5181\t/etc/mysql\n8453\t/etc/nanorc\n2064\t/etc/netscsid.conf\n12602\t/etc/network\n12958\t/etc/NetworkManager\n91\t/etc/networks\n739\t/etc/newt\n513\t/etc/nsswitch.conf\n689\t/etc/obex-data-server\n6\t/etc/ODBCDataSources\n0\t/etc/odbc.ini\n0\t/etc/odbcinst.ini\n9012\t/etc/openal\n90\t/etc/OpenCL\n10421\t/etc/openhpi\n15684\t/etc/openvpn\n6\t/etc/opt\n552\t/etc/pam.conf\n24963\t/etc/pam.d\n7\t/etc/papersize\n2039\t/etc/passwd\n2036\t/etc/passwd-\n1141\t/etc/pcmcia\n667\t/etc/perl\n346\t/etc/pkcs11\n2243\t/etc/pm\n7649\t/etc/pnm2ppa.conf\n1084\t/etc/polkit-1\n350\t/etc/popularity-contest.conf\n41552\t/etc/ppp\n22\t/etc/printcap\n665\t/etc/profile\n506\t/etc/profile.d\n2933\t/etc/protocols\n11511\t/etc/pulse\n2172\t/etc/purple\n120\t/etc/python\n184\t/etc/python2.7\n4900\t/etc/rc0.d\n4861\t/etc/rc1.d\n5288\t/etc/rc2.d\n5263\t/etc/rc3.d\n5263\t/etc/rc4.d\n5263\t/etc/rc5.d\n4900\t/etc/rc6.d\n306\t/etc/rc.local\n608\t/etc/rcS.d\n1889\t/etc/request-key.conf\n9102\t/etc/resolvconf\n60\t/etc/resolv.conf\n147\t/etc/resolv.conf.orig\n268\t/etc/rmt\n887\t/etc/rpc\n1263\t/etc/rsyslog.conf\n2677\t/etc/rsyslog.d\n12559\t/etc/samba\n71429\t/etc/sane.d\n3902\t/etc/securetty\n24629\t/etc/security\n10333\t/etc/sensors3.conf\n25\t/etc/sensors.d\n19281\t/etc/services\n19266\t/etc/sgml\n1356\t/etc/shadow\n1231\t/etc/shadow-\n73\t/etc/shells\n12903\t/etc/skel\n235\t/etc/snmp\n112051\t/etc/sound\n53500\t/etc/speech-dispatcher\n138042\t/etc/ssh\n465414\t/etc/ssl\n741\t/etc/sudoers\n772\t/etc/sudoers.d\n19\t/etc/su-to-rootrc\n2112\t/etc/sysctl.conf\n8215\t/etc/sysctl.d\n118\t/etc/systemd\n231\t/etc/terminfo\n186\t/etc/thunderbird\n20\t/etc/timezone\n4680\t/etc/timidity\n645\t/etc/ts.conf\n1260\t/etc/ucf.conf\n3665\t/etc/udev\n9425\t/etc/ufw\n326\t/etc/updatedb.conf\n1141\t/etc/update-manager\n8396\t/etc/update-motd.d\n6\t/etc/update-notifier\n1678\t/etc/UPower\n572\t/etc/usb_modeswitch.conf\n6\t/etc/usb_modeswitch.d\n25081\t/etc/vga\n2912\t/etc/vim\n496\t/etc/vlc\n21837\t/etc/vpnc\n23\t/etc/vtrgb\n4496\t/etc/wgetrc\n4680\t/etc/wildmidi\n1343\t/etc/wodim.conf\n31611\t/etc/wpa_supplicant\n226309\t/etc/X11\n111971\t/etc/xdg\n769\t/etc/xl2tpd\n35802\t/etc/xml\n326\t/etc/xul-ext\n349\t/etc/zsh_command_not_found\n"
  },
  {
    "path": "tests/stdin.02.txt",
    "content": "2012-01-01  08:01:52  anacron[14182]: Job `cron.daily'\n2012-01-02  08:01:52  anacron[14182]: Normal exit\n2012-01-03  08:17:01  CRON[14610]: (root) CMD\n2012-01-04  09:07:50  pppd[13041]: Modem hangup\n2012-01-05  09:07:50  pppd[13041]: Connect time\n2012-01-06  09:07:50  pppd[13041]: Sent 19243191\n2012-01-07  09:07:50  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-08  09:07:50  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-09  09:07:50  modem-manager[1113]: <info> (ttyUSB2)\n2012-01-01  09:07:50  modem-manager[1113]: <info> (ttyUSB2)\n2012-01-02  09:07:50  kernel: [142597.045021] usb\n2012-01-03  09:07:50  kernel: [142597.045214] option:\n2012-01-04  09:07:50  kernel: [142597.045492] option1\n2012-01-05  09:07:50  kernel: [142597.045525] option\n2012-01-06  09:07:50  kernel: [142597.045773] option1\n2012-01-07  09:07:50  kernel: [142597.045814] option\n2012-01-08  09:07:50  pppd[13041]: Connection terminated.\n2012-01-09  09:07:50  modem-manager[1113]: <info> (tty/ttyUSB0):\n2012-01-01  09:07:50  kernel: [142597.046728] option1\n2012-01-02  09:07:50  kernel: [142597.046777] option\n2012-01-03  09:07:50  modem-manager[1113]: <info> Modem\n2012-01-04  09:07:50  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-05  09:07:50  NetworkManager[1127]: <warn> Activation\n2012-01-06  09:07:50  NetworkManager[1127]: SCPlugin-Ifupdown: devices\n2012-01-07  09:07:50  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-08  09:07:50  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-09  09:07:50  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-01  09:07:50  dbus[1092]: [system] Activating\n2012-01-02  09:07:50  NetworkManager[1127]: <warn> could\n2012-01-03  09:07:50  NetworkManager[1127]: nm_system_iface_flush_routes: assertion\n2012-01-04  09:07:50  NetworkManager[1127]: nm_system_iface_flush_addresses: assertion\n2012-01-05  09:07:50  dbus[1092]: [system] Successfully\n2012-01-06  09:07:50  dnsmasq[13066]: exiting on\n2012-01-07  09:07:50  NetworkManager[1127]: <info> DNS:\n2012-01-08  09:07:50  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-09  09:07:50  dnsmasq[14766]: started, version\n2012-01-01  09:07:50  dnsmasq[14766]: compile time\n2012-01-02  09:07:50  dnsmasq[14766]: warning: no\n2012-01-03  09:07:50  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-04  09:07:50  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-05  09:07:50  NetworkManager[1127]: <info> Unmanaged\n2012-01-06  09:07:50  NetworkManager[1127]: <info> Unmanaged\n2012-01-07  09:07:52  pppd[13041]: Exit. \n2012-01-08  09:07:54  NetworkManager[1127]: <info> sleep\n2012-01-09  09:07:54  NetworkManager[1127]: <info> sleeping\n2012-01-01  09:07:54  NetworkManager[1127]: <info> (eth0):\n2012-01-02  09:07:54  NetworkManager[1127]: <info> (eth0):\n2012-01-03  09:07:54  NetworkManager[1127]: <info> (eth0):\n2012-01-04  09:07:54  NetworkManager[1127]: <info> (eth0):\n2012-01-05  09:07:55  anacron[14932]: Anacron 2.3\n2012-01-06  09:07:55  anacron[14932]: Normal exit\n2012-01-07  09:07:56  NetworkManager[1127]: <info> (wlan0):\n2012-01-08  09:07:56  NetworkManager[1127]: <info> (wlan0):\n2012-01-09  09:07:56  NetworkManager[1127]: SCPlugin-Ifupdown: devices\n2012-01-01  09:07:56  NetworkManager[1127]: <info> radio\n2012-01-02  09:07:56  NetworkManager[1127]: <info> WiFi\n2012-01-03  09:07:57  kernel: [142603.804145] bcma-pci-bridge\n2012-01-04  09:37:34  kernel: [142606.236638] PM:\n2012-01-05  09:37:34  kernel: [142606.399207] PM:\n2012-01-06  09:37:34  kernel: [142606.399218] Freezing\n2012-01-07  09:37:34  kernel: [142606.413472] Freezing\n2012-01-08  09:37:34  kernel: [142606.429503] PM:\n2012-01-09  09:37:34  kernel: [142606.429522] Suspending\n2012-01-01  09:37:34  kernel: [142606.430280] sd\n2012-01-02  09:37:34  kernel: [142606.430306] apple-gmux\n2012-01-03  09:37:34  kernel: [142606.430367] sd\n2012-01-04  09:37:34  kernel: [142606.431471] snd_hda_intel\n2012-01-05  09:37:34  kernel: [142606.431474] [fglrx]\n2012-01-06  09:37:34  kernel: [142606.431534] pciehp\n2012-01-07  09:37:34  kernel: [142606.431537] [fglrx]\n2012-01-08  09:37:34  kernel: [142606.469351] uhci_hcd\n2012-01-09  09:37:34  kernel: [142606.469376] uhci_hcd\n2012-01-01  09:37:34  kernel: [142606.477296] ehci_hcd\n2012-01-02  09:37:34  kernel: [142606.493280] ehci_hcd\n2012-01-03  09:37:34  kernel: [142606.533344] snd_hda_intel\n2012-01-04  09:37:34  kernel: [142606.549221] PM:\n2012-01-05  09:37:34  kernel: [142607.070401] PM:\n2012-01-06  09:37:34  kernel: [142607.070417] PM:\n2012-01-07  09:37:34  kernel: [142607.070424] PM:\n2012-01-08  09:37:34  kernel: [142607.070680] ata_piix\n2012-01-09  09:37:34  kernel: [142607.084707] PM:\n2012-01-01  09:37:34  kernel: [142607.361272] [fglrx]\n2012-01-02  09:37:34  kernel: [142607.361274] [fglrx]\n2012-01-03  09:37:34  kernel: [142607.361345] PM:\n2012-01-04  09:37:34  kernel: [142607.361366] PM:\n2012-01-05  09:37:34  kernel: [142607.361418] PM:\n2012-01-06  09:37:34  kernel: [142607.361461] PM:\n2012-01-07  09:37:34  kernel: [142607.361463] PM:\n2012-01-08  09:37:34  kernel: [142607.361901] ehci_hcd\n2012-01-09  09:37:34  kernel: [142607.361908] ehci_hcd\n2012-01-01  09:37:34  kernel: [142607.376801] ehci_hcd\n2012-01-02  09:37:34  kernel: [142607.376807] ehci_hcd\n2012-01-03  09:37:34  kernel: [142607.408538] PM:\n2012-01-04  09:37:34  kernel: [142607.408793] ACPI:\n2012-01-05  09:37:34  kernel: [142607.448529] PM:\n2012-01-06  09:37:34  kernel: [142607.448680] Disabling\n2012-01-07  09:37:34  kernel: [142607.552327] CPU\n2012-01-08  09:37:34  kernel: [142607.656226] CPU\n2012-01-09  09:37:34  kernel: [142607.760122] CPU\n2012-01-01  09:37:34  kernel: [142607.864015] CPU\n2012-01-02  09:37:34  kernel: [142607.967918] CPU\n2012-01-03  09:37:34  kernel: [142608.071815] CPU\n2012-01-04  09:37:34  kernel: [142608.175716] CPU\n2012-01-05  09:37:34  kernel: [142608.176048] Extended\n2012-01-06  09:37:34  kernel: [142608.176319] ACPI:\n2012-01-07  09:37:34  kernel: [142608.176359] PM:\n2012-01-08  09:37:34  kernel: [142608.176667] Extended\n2012-01-09  09:37:34  kernel: [142608.176704] Enabling\n2012-01-01  09:37:34  kernel: [142608.176802] Booting\n2012-01-02  09:37:34  kernel: [142608.176804] smpboot\n2012-01-03  09:37:34  kernel: [142608.187115] Initializing\n2012-01-04  09:37:34  kernel: [142608.187819] Calibrating\n2012-01-05  09:37:34  kernel: [142608.208146] NMI\n2012-01-06  09:37:34  kernel: [142608.208802] CPU1\n2012-01-07  09:37:34  kernel: [142608.208915] Booting\n2012-01-08  09:37:34  kernel: [142608.208916] smpboot\n2012-01-09  09:37:34  kernel: [142608.219212] Initializing\n2012-01-01  09:37:34  kernel: [142608.219930] Calibrating\n2012-01-02  09:37:34  kernel: [142608.240268] NMI\n2012-01-03  09:37:34  kernel: [142608.240987] CPU2\n2012-01-04  09:37:34  kernel: [142608.241045] Booting\n2012-01-05  09:37:34  kernel: [142608.241047] smpboot\n2012-01-06  09:37:34  kernel: [142608.251343] Initializing\n2012-01-07  09:37:34  kernel: [142608.252061] Calibrating\n2012-01-08  09:37:34  kernel: [142608.272427] NMI\n2012-01-09  09:37:34  kernel: [142608.273159] CPU3\n2012-01-01  09:37:34  kernel: [142608.273233] Booting\n2012-01-02  09:37:34  kernel: [142608.273234] smpboot\n2012-01-03  09:37:34  kernel: [142608.283529] Initializing\n2012-01-04  09:37:34  kernel: [142608.284247] Calibrating\n2012-01-05  09:37:34  kernel: [142608.304827] NMI\n2012-01-06  09:37:34  kernel: [142608.305639] CPU4\n2012-01-07  09:37:34  kernel: [142608.305738] Booting\n2012-01-08  09:37:34  kernel: [142608.305739] smpboot\n2012-01-09  09:37:34  kernel: [142608.316043] Initializing\n2012-01-01  09:37:34  kernel: [142608.316754] Calibrating\n2012-01-02  09:37:34  kernel: [142608.337444] NMI\n2012-01-03  09:37:34  kernel: [142608.338329] CPU5\n2012-01-04  09:37:34  kernel: [142608.338442] Booting\n2012-01-05  09:37:34  kernel: [142608.338444] smpboot\n2012-01-06  09:37:34  kernel: [142608.348727] Initializing\n2012-01-07  09:37:34  kernel: [142608.349456] Calibrating\n2012-01-08  09:37:34  kernel: [142608.370266] NMI\n2012-01-09  09:37:34  kernel: [142608.371217] CPU6\n2012-01-01  09:37:34  kernel: [142608.371481] Booting\n2012-01-02  09:37:34  kernel: [142608.371483] smpboot\n2012-01-03  09:37:34  kernel: [142608.381765] Initializing\n2012-01-04  09:37:34  kernel: [142608.382495] Calibrating\n2012-01-05  09:37:34  kernel: [142608.403488] NMI\n2012-01-06  09:37:34  kernel: [142608.404562] CPU7\n2012-01-07  09:37:34  kernel: [142608.412434] ACPI:\n2012-01-08  09:37:34  kernel: [142609.363300] pcieport\n2012-01-09  09:37:34  kernel: [142609.363305] pcieport\n2012-01-01  09:37:34  kernel: [142609.363307] pcieport\n2012-01-02  09:37:34  kernel: [142609.363309] pcieport\n2012-01-03  09:37:34  kernel: [142609.363312] pcieport\n2012-01-04  09:37:34  kernel: [142609.363315] pcieport\n2012-01-05  09:37:34  kernel: [142609.363331] pcieport\n2012-01-06  09:37:34  kernel: [142609.363335] pcieport\n2012-01-07  09:37:34  kernel: [142609.363337] pcieport\n2012-01-08  09:37:34  kernel: [142609.363339] pcieport\n2012-01-09  09:37:34  kernel: [142609.363341] pcieport\n2012-01-01  09:37:34  kernel: [142609.363344] pcieport\n2012-01-02  09:37:34  kernel: [142609.363346] pcieport\n2012-01-03  09:37:34  kernel: [142609.363363] mei\n2012-01-04  09:37:34  kernel: [142609.363376] mei\n2012-01-05  09:37:34  kernel: [142609.363394] uhci_hcd\n2012-01-06  09:37:34  kernel: [142609.363404] uhci_hcd\n2012-01-07  09:37:34  kernel: [142609.363413] uhci_hcd\n2012-01-08  09:37:34  kernel: [142609.363433] ehci_hcd\n2012-01-09  09:37:34  kernel: [142609.363448] ehci_hcd\n2012-01-01  09:37:34  kernel: [142609.363454] ehci_hcd\n2012-01-02  09:37:34  kernel: [142609.363470] ehci_hcd\n2012-01-03  09:37:34  kernel: [142609.363474] ehci_hcd\n2012-01-04  09:37:34  kernel: [142609.363487] snd_hda_intel\n2012-01-05  09:37:34  kernel: [142609.363499] snd_hda_intel\n2012-01-06  09:37:34  kernel: [142609.363503] snd_hda_intel\n2012-01-07  09:37:34  kernel: [142609.363508] snd_hda_intel\n2012-01-08  09:37:34  kernel: [142609.363532] pcieport\n2012-01-09  09:37:34  kernel: [142609.363541] pcieport\n2012-01-01  09:37:34  kernel: [142609.363545] pcieport\n2012-01-02  09:37:34  kernel: [142609.363549] pcieport\n2012-01-03  09:37:34  kernel: [142609.363553] pcieport\n2012-01-04  09:37:34  kernel: [142609.363559] pcieport\n2012-01-05  09:37:34  kernel: [142609.363563] pcieport\n2012-01-06  09:37:34  kernel: [142609.363601] pcieport\n2012-01-07  09:37:34  kernel: [142609.363610] pcieport\n2012-01-08  09:37:34  kernel: [142609.363614] pcieport\n2012-01-09  09:37:34  kernel: [142609.363618] pcieport\n2012-01-01  09:37:34  kernel: [142609.363622] pcieport\n2012-01-02  09:37:34  kernel: [142609.363628] pcieport\n2012-01-03  09:37:34  kernel: [142609.363632] pcieport\n2012-01-04  09:37:34  kernel: [142609.363671] pcieport\n2012-01-05  09:37:34  kernel: [142609.363679] pcieport\n2012-01-06  09:37:34  kernel: [142609.363684] pcieport\n2012-01-07  09:37:34  kernel: [142609.363691] pcieport\n2012-01-08  09:37:34  kernel: [142609.363696] pcieport\n2012-01-09  09:37:34  kernel: [142609.363734] pcieport\n2012-01-01  09:37:34  kernel: [142609.363743] pcieport\n2012-01-02  09:37:34  kernel: [142609.363747] pcieport\n2012-01-03  09:37:34  kernel: [142609.363751] pcieport\n2012-01-04  09:37:34  kernel: [142609.363755] pcieport\n2012-01-05  09:37:34  kernel: [142609.363760] pcieport\n2012-01-06  09:37:34  kernel: [142609.363765] pcieport\n2012-01-07  09:37:34  kernel: [142609.363796] uhci_hcd\n2012-01-08  09:37:34  kernel: [142609.363806] uhci_hcd\n2012-01-09  09:37:34  kernel: [142609.363815] uhci_hcd\n2012-01-01  09:37:34  kernel: [142609.363834] ehci_hcd\n2012-01-02  09:37:34  kernel: [142609.363849] ehci_hcd\n2012-01-03  09:37:34  kernel: [142609.363855] ehci_hcd\n2012-01-04  09:37:34  kernel: [142609.363869] ehci_hcd\n2012-01-05  09:37:34  kernel: [142609.363873] ehci_hcd\n2012-01-06  09:37:34  kernel: [142609.363915] ata_piix\n2012-01-07  09:37:34  kernel: [142609.363923] ata_piix\n2012-01-08  09:37:34  kernel: [142609.363927] ata_piix\n2012-01-09  09:37:34  kernel: [142609.363931] ata_piix\n2012-01-01  09:37:34  kernel: [142609.363935] ata_piix\n2012-01-02  09:37:34  kernel: [142609.363939] ata_piix\n2012-01-03  09:37:34  kernel: [142609.363944] ata_piix\n2012-01-04  09:37:34  kernel: [142609.363956] pci\n2012-01-05  09:37:34  kernel: [142609.363968] pci\n2012-01-06  09:37:34  kernel: [142609.363974] pci\n2012-01-07  09:37:34  kernel: [142609.363994] fglrx_pci\n2012-01-08  09:37:34  kernel: [142609.363999] fglrx_pci\n2012-01-09  09:37:34  kernel: [142609.364005] fglrx_pci\n2012-01-01  09:37:34  kernel: [142609.364009] fglrx_pci\n2012-01-02  09:37:34  kernel: [142609.364013] fglrx_pci\n2012-01-03  09:37:34  kernel: [142609.364017] fglrx_pci\n2012-01-04  09:37:34  kernel: [142609.364021] fglrx_pci\n2012-01-05  09:37:34  kernel: [142609.364056] snd_hda_intel\n2012-01-06  09:37:34  kernel: [142609.364069] snd_hda_intel\n2012-01-07  09:37:34  kernel: [142609.364072] snd_hda_intel\n2012-01-08  09:37:34  kernel: [142609.364077] snd_hda_intel\n2012-01-09  09:37:34  kernel: [142609.364165] tg3\n2012-01-01  09:37:34  kernel: [142609.364190] tg3\n2012-01-02  09:37:34  kernel: [142609.364198] tg3\n2012-01-03  09:37:34  kernel: [142609.364204] tg3\n2012-01-04  09:37:34  kernel: [142609.364212] tg3\n2012-01-05  09:37:34  kernel: [142609.364303] pci\n2012-01-06  09:37:34  kernel: [142609.364320] pci\n2012-01-07  09:37:34  kernel: [142609.364346] pci\n2012-01-08  09:37:34  kernel: [142609.364354] pci\n2012-01-09  09:37:34  kernel: [142609.364365] pci\n2012-01-01  09:37:34  kernel: [142609.364433] firewire_ohci\n2012-01-02  09:37:34  kernel: [142609.364465] firewire_ohci\n2012-01-03  09:37:34  kernel: [142609.364473] firewire_ohci\n2012-01-04  09:37:34  kernel: [142609.364560] PM:\n2012-01-05  09:37:34  kernel: [142609.364660] uhci_hcd\n2012-01-06  09:37:34  kernel: [142609.364669] uhci_hcd\n2012-01-07  09:37:34  kernel: [142609.364685] mei\n2012-01-08  09:37:34  kernel: [142609.364694] ehci_hcd\n2012-01-09  09:37:34  kernel: [142609.364697] usb\n2012-01-01  09:37:34  kernel: [142609.364699] snd_hda_intel\n2012-01-02  09:37:34  kernel: [142609.364705] ehci_hcd\n2012-01-03  09:37:34  kernel: [142609.364714] snd_hda_intel\n2012-01-04  09:37:34  kernel: [142609.364736] uhci_hcd\n2012-01-05  09:37:34  kernel: [142609.364739] ehci_hcd\n2012-01-06  09:37:34  kernel: [142609.364744] pciehp\n2012-01-07  09:37:34  kernel: [142609.364747] ata_piix\n2012-01-08  09:37:34  kernel: [142609.364753] snd_hda_intel\n2012-01-09  09:37:34  kernel: [142609.364765] uhci_hcd\n2012-01-01  09:37:34  kernel: [142609.364767] ata_piix\n2012-01-02  09:37:34  kernel: [142609.364770] ehci_hcd\n2012-01-03  09:37:34  kernel: [142609.364775] snd_hda_intel\n2012-01-04  09:37:34  kernel: [142609.364817] usb\n2012-01-05  09:37:34  kernel: [142609.364871] snd_hda_intel\n2012-01-06  09:37:34  kernel: [142609.364910] fglrx_pci\n2012-01-07  09:37:34  kernel: [142609.364932] snd_hda_intel\n2012-01-08  09:37:34  kernel: [142609.365580] sd\n2012-01-09  09:37:34  kernel: [142609.369962] [fglrx]\n2012-01-01  09:37:34  kernel: [142609.370140] [fglrx]\n2012-01-02  09:37:34  kernel: [142609.414760] [fglrx]\n2012-01-03  09:37:34  kernel: [142609.414831] [fglrx]\n2012-01-04  09:37:34  kernel: [142609.419272] firewire_ohci\n2012-01-05  09:37:34  kernel: [142609.419483] firewire_core:\n2012-01-06  09:37:34  kernel: [142609.483100] PM:\n2012-01-07  09:37:34  kernel: [142609.483105] PM:\n2012-01-08  09:37:34  kernel: [142609.483108] PM:\n2012-01-09  09:37:34  kernel: [142609.483113] PM:\n2012-01-01  09:37:34  kernel: [142609.483116] PM:\n2012-01-02  09:37:34  kernel: [142609.483122] PM:\n2012-01-03  09:37:34  kernel: [142609.487587] PM:\n2012-01-04  09:37:34  kernel: [142609.487603] PM:\n2012-01-05  09:37:34  kernel: [142609.487607] PM:\n2012-01-06  09:37:34  kernel: [142609.487611] PM:\n2012-01-07  09:37:34  kernel: [142609.487614] PM:\n2012-01-08  09:37:34  kernel: [142609.487617] PM:\n2012-01-09  09:37:34  kernel: [142609.487648] PM:\n2012-01-01  09:37:34  kernel: [142609.487936] PM:\n2012-01-02  09:37:34  kernel: [142609.487939] PM:\n2012-01-03  09:37:34  kernel: [142609.487942] PM:\n2012-01-04  09:37:34  kernel: [142609.487947] PM:\n2012-01-05  09:37:34  kernel: [142609.487950] PM:\n2012-01-06  09:37:34  kernel: [142609.487953] PM:\n2012-01-07  09:37:34  kernel: [142609.515164] PM:\n2012-01-08  09:37:34  kernel: [142609.515377] Extended\n2012-01-09  09:37:34  kernel: [142609.535655] PM:\n2012-01-01  09:37:34  kernel: [142609.535659] PM:\n2012-01-02  09:37:34  kernel: [142609.535663] PM:\n2012-01-03  09:37:34  kernel: [142609.535667] PM:\n2012-01-04  09:37:34  kernel: [142609.535670] PM:\n2012-01-05  09:37:34  kernel: [142609.535673] PM:\n2012-01-06  09:37:34  kernel: [142609.535675] PM:\n2012-01-07  09:37:34  kernel: [142609.535680] PM:\n2012-01-08  09:37:34  kernel: [142609.535693] PM:\n2012-01-09  09:37:34  kernel: [142609.535695] PM:\n2012-01-01  09:37:34  kernel: [142609.535697] PM:\n2012-01-02  09:37:34  kernel: [142609.535701] PM:\n2012-01-03  09:37:34  kernel: [142609.918715] firewire_core:\n2012-01-04  09:37:34  kernel: [142610.709877] ata2.01:\n2012-01-05  09:37:34  kernel: [142610.709966] ata1.01:\n2012-01-06  09:37:34  kernel: [142610.865813] ata2.00:\n2012-01-07  09:37:34  kernel: [142610.865826] ata2.01:\n2012-01-08  09:37:34  kernel: [142610.865835] ata2.01:\n2012-01-09  09:37:34  kernel: [142610.873997] ata2.00:\n2012-01-01  09:37:34  kernel: [142610.889964] ata2.00:\n2012-01-02  09:37:34  kernel: [142611.145547] ata1.00:\n2012-01-03  09:37:34  kernel: [142611.145558] ata1.01:\n2012-01-04  09:37:34  kernel: [142611.153728] ata1.00:\n2012-01-05  09:37:34  kernel: [142611.161928] ata1.00:\n2012-01-06  09:37:34  kernel: [142611.190133] PM:\n2012-01-07  09:37:34  kernel: [142611.190169] PM:\n2012-01-08  09:37:34  kernel: [142611.190173] PM:\n2012-01-09  09:37:34  kernel: [142611.191213] PM:\n2012-01-01  09:37:34  kernel: [142611.191267] PM:\n2012-01-02  09:37:34  kernel: [142611.191296] PM:\n2012-01-03  09:37:34  kernel: [142611.191297] Restarting\n2012-01-04  09:37:34  anacron[15579]: Anacron 2.3\n2012-01-05  09:37:34  anacron[15579]: Normal exit\n2012-01-06  09:37:34  kernel: [142611.282257] bcma-pci-bridge\n2012-01-07  09:37:34  kernel: [142611.282274] bcma-pci-bridge\n2012-01-08  09:37:34  kernel: [142611.282356] bcma:\n2012-01-09  09:37:34  kernel: [142611.282393] bcma:\n2012-01-01  09:37:34  kernel: [142611.282481] bcma:\n2012-01-02  09:37:34  kernel: [142611.282678] bcma:\n2012-01-03  09:37:34  kernel: [142611.358663] bcma:\n2012-01-04  09:37:34  kernel: [142611.360598] cfg80211:\n2012-01-05  09:37:34  kernel: [142611.365308] cfg80211:\n2012-01-06  09:37:34  kernel: [142611.365310] cfg80211:\n2012-01-07  09:37:34  kernel: [142611.365313] cfg80211:\n2012-01-08  09:37:34  kernel: [142611.365316] cfg80211:\n2012-01-09  09:37:34  kernel: [142611.365318] cfg80211:\n2012-01-01  09:37:34  kernel: [142611.365321] cfg80211:\n2012-01-02  09:37:34  kernel: [142611.365323] cfg80211:\n2012-01-03  09:37:34  kernel: [142611.366185] b43-phy0:\n2012-01-04  09:37:34  kernel: [142611.366858] cfg80211:\n2012-01-05  09:37:34  kernel: [142611.366860] cfg80211:\n2012-01-06  09:37:34  kernel: [142611.366861] cfg80211:\n2012-01-07  09:37:34  kernel: [142611.366863] cfg80211:\n2012-01-08  09:37:34  kernel: [142611.366865] cfg80211:\n2012-01-09  09:37:34  kernel: [142611.366866] cfg80211:\n2012-01-01  09:37:34  kernel: [142611.366868] cfg80211:\n2012-01-02  09:37:34  kernel: [142611.366870] cfg80211:\n2012-01-03  09:37:34  kernel: [142611.366871] cfg80211:\n2012-01-04  09:37:34  kernel: [142611.366873] cfg80211:\n2012-01-05  09:37:34  kernel: [142611.366874] cfg80211:\n2012-01-06  09:37:34  kernel: [142611.366876] cfg80211:\n2012-01-07  09:37:34  kernel: [142611.366877] cfg80211:\n2012-01-08  09:37:34  kernel: [142611.366879] cfg80211:\n2012-01-09  09:37:34  kernel: [142611.366881] cfg80211:\n2012-01-01  09:37:34  kernel: [142611.366882] cfg80211:\n2012-01-02  09:37:34  kernel: [142611.366884] cfg80211:\n2012-01-03  09:37:34  kernel: [142611.366886] cfg80211:\n2012-01-04  09:37:34  kernel: [142611.366887] cfg80211:\n2012-01-05  09:37:34  kernel: [142611.366889] cfg80211:\n2012-01-06  09:37:34  kernel: [142611.366890] cfg80211:\n2012-01-07  09:37:34  kernel: [142611.366892] cfg80211:\n2012-01-08  09:37:34  kernel: [142611.366893] cfg80211:\n2012-01-09  09:37:34  kernel: [142611.366895] cfg80211:\n2012-01-01  09:37:34  kernel: [142611.366896] cfg80211:\n2012-01-02  09:37:34  kernel: [142611.366898] cfg80211:\n2012-01-03  09:37:34  kernel: [142611.366900] cfg80211:\n2012-01-04  09:37:34  kernel: [142611.366901] cfg80211:\n2012-01-05  09:37:34  kernel: [142611.366998] ieee80211\n2012-01-06  09:37:34  kernel: [142611.367354] Broadcom\n2012-01-07  09:37:34  NetworkManager[1127]: <info> found\n2012-01-08  09:37:34  NetworkManager[1127]: <info> WiFi\n2012-01-09  09:37:34  NetworkManager[1127]: SCPlugin-Ifupdown: devices\n2012-01-01  09:37:34  NetworkManager[1127]: SCPlugin-Ifupdown: device\n2012-01-02  09:37:34  NetworkManager[1127]: <info> (wlan0):\n2012-01-03  09:37:34  NetworkManager[1127]: <warn> (wlan0):\n2012-01-04  09:37:34  NetworkManager[1127]: <info> (wlan0):\n2012-01-05  09:37:34  NetworkManager[1127]: <info> (wlan0):\n2012-01-06  09:37:35  NetworkManager[1127]: <info> wake\n2012-01-07  09:37:35  NetworkManager[1127]: <info> waking\n2012-01-08  09:37:35  NetworkManager[1127]: <info> (eth0):\n2012-01-09  09:37:35  NetworkManager[1127]: <info> (eth0):\n2012-01-01  09:37:35  NetworkManager[1127]: <info> (eth0):\n2012-01-02  09:37:35  kernel: [142611.760464] tg3\n2012-01-03  09:37:35  kernel: [142611.760472] tg3\n2012-01-04  09:37:35  kernel: [142611.760480] tg3\n2012-01-05  09:37:35  kernel: [142611.760487] tg3\n2012-01-06  09:37:35  kernel: [142611.760492] tg3\n2012-01-07  09:37:35  NetworkManager[1127]: <info> (eth0):\n2012-01-08  09:37:35  NetworkManager[1127]: <info> (eth0):\n2012-01-09  09:37:35  NetworkManager[1127]: <info> Unmanaged\n2012-01-01  09:37:35  NetworkManager[1127]: <info> Unmanaged\n2012-01-02  09:37:35  NetworkManager[1127]: <info> (wlan0):\n2012-01-03  09:37:35  NetworkManager[1127]: <info> (wlan0):\n2012-01-04  09:37:35  NetworkManager[1127]: <info> (wlan0):\n2012-01-05  09:37:35  NetworkManager[1127]: <info> (wlan0):\n2012-01-06  09:37:35  kernel: [142612.052707] ADDRCONF(NETDEV_UP):\n2012-01-07  09:37:35  kernel: [142612.053500] ADDRCONF(NETDEV_UP):\n2012-01-08  09:37:36  NetworkManager[1127]: <info> (eth0):\n2012-01-09  09:37:36  NetworkManager[1127]: <info> (eth0):\n2012-01-01  09:37:36  NetworkManager[1127]: <info> Auto-activating\n2012-01-02  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-03  09:37:36  kernel: [142613.615346] tg3\n2012-01-04  09:37:36  kernel: [142613.615356] tg3\n2012-01-05  09:37:36  NetworkManager[1127]: <info> (eth0):\n2012-01-06  09:37:36  kernel: [142613.615363] tg3\n2012-01-07  09:37:36  kernel: [142613.615668] ADDRCONF(NETDEV_CHANGE):\n2012-01-08  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-09  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-01  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-02  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-03  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-04  09:37:36  NetworkManager[1127]: <info> (eth0):\n2012-01-05  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-06  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-07  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-08  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-09  09:37:36  NetworkManager[1127]: <info> (eth0):\n2012-01-01  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-02  09:37:36  dhclient: Internet Systems\n2012-01-03  09:37:36  dhclient: Copyright 2004-2011\n2012-01-04  09:37:36  dhclient: All rights\n2012-01-05  09:37:36  dhclient: For info,\n2012-01-06  09:37:36  dhclient:  \n2012-01-07  09:37:36  NetworkManager[1127]: <info> dhclient\n2012-01-08  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-09  09:37:36  NetworkManager[1127]: <info> Activation\n2012-01-01  09:37:36  NetworkManager[1127]: <info> (eth0):\n2012-01-02  09:37:36  dhclient: Listening on\n2012-01-03  09:37:36  dhclient: Sending on\n2012-01-04  09:37:36  dhclient: Sending on\n2012-01-05  09:37:36  dhclient: DHCPDISCOVER on\n2012-01-06  09:37:37  dhclient: DHCPREQUEST of\n2012-01-07  09:37:37  dhclient: DHCPOFFER of\n2012-01-08  09:37:37  dhclient: DHCPACK of\n2012-01-09  09:37:37  dhclient: bound to\n2012-01-01  09:37:37  NetworkManager[1127]: <info> (eth0):\n2012-01-02  09:37:37  NetworkManager[1127]: <info> address\n2012-01-03  09:37:37  NetworkManager[1127]: <info> prefix\n2012-01-04  09:37:37  NetworkManager[1127]: <info> gateway\n2012-01-05  09:37:37  NetworkManager[1127]: <info> hostname\n2012-01-06  09:37:37  NetworkManager[1127]: <info> nameserver\n2012-01-07  09:37:37  NetworkManager[1127]: <info> nameserver\n2012-01-08  09:37:37  NetworkManager[1127]: <info> Activation\n2012-01-09  09:37:37  NetworkManager[1127]: <info> Activation\n2012-01-01  09:37:38  dnsmasq[14766]: exiting on\n2012-01-02  09:37:38  NetworkManager[1127]: <info> DNS:\n2012-01-03  09:37:38  NetworkManager[1127]: <info> (eth0):\n2012-01-04  09:37:38  NetworkManager[1127]: <info> (eth0):\n2012-01-05  09:37:38  dnsmasq[16068]: started, version\n2012-01-06  09:37:38  dnsmasq[16068]: compile time\n2012-01-07  09:37:38  dnsmasq[16068]: using nameserver\n2012-01-08  09:37:38  dnsmasq[16068]: using nameserver\n2012-01-09  09:37:39  NetworkManager[1127]: <info> Policy\n2012-01-01  09:37:39  NetworkManager[1127]: <info> Activation\n2012-01-02  09:37:39  NetworkManager[1127]: <info> Activation\n2012-01-03  09:37:39  dbus[1092]: [system] Activating\n2012-01-04  09:37:39  dbus[1092]: [system] Successfully\n2012-01-05  09:37:41  gnome-screensaver-dialog: pam_ecryptfs: pam_sm_authenticate:\n2012-01-06  09:37:47  kernel: [142623.749159] eth0:\n2012-01-07  09:37:47  ntpdate[16132]: step time\n2012-01-08  09:37:55  NetworkManager[1127]: <info> (eth0):\n2012-01-09  09:37:55  NetworkManager[1127]: <info> Activation\n2012-01-01  09:37:55  NetworkManager[1127]: <info> Activation\n2012-01-02  09:37:55  NetworkManager[1127]: <info> Activation\n2012-01-03  09:38:19  dbus[1092]: [system] Activating\n2012-01-04  09:38:19  AptDaemon: INFO: Initializing\n2012-01-05  09:38:19  dbus[1092]: [system] Successfully\n2012-01-06  09:38:19  AptDaemon.PackageKit: INFO: Initializing\n2012-01-07  09:38:19  AptDaemon: INFO: CommitPackages()\n2012-01-08  09:38:20  AptDaemon.Trans: INFO: Queuing\n2012-01-09  09:38:24  AptDaemon.Worker: INFO: Simulating\n2012-01-01  09:38:24  AptDaemon.Worker: INFO: Committing\n2012-01-02  09:38:25  AptDaemon.Worker: INFO: Processing\n2012-01-03  09:43:30  anacron[16257]: Anacron 2.3\n2012-01-04  09:43:30  anacron[16257]: Normal exit\n2012-01-05  10:05:34  kernel: [144290.760767] CPU6:\n2012-01-06  10:05:34  kernel: [144290.760771] CPU2:\n2012-01-07  10:05:34  kernel: [144290.760774] CPU0:\n2012-01-08  10:05:34  kernel: [144290.760779] CPU3:\n2012-01-09  10:05:34  kernel: [144290.760783] CPU5:\n2012-01-01  10:05:34  kernel: [144290.760786] CPU1:\n2012-01-02  10:05:34  kernel: [144290.760790] CPU7:\n2012-01-03  10:05:34  kernel: [144290.760794] CPU4:\n2012-01-04  10:05:34  kernel: [144290.760797] CPU2:\n2012-01-05  10:05:34  kernel: [144290.760801] CPU6:\n2012-01-06  10:05:34  kernel: [144290.765807] CPU2:\n2012-01-07  10:05:34  kernel: [144290.765810] CPU6:\n2012-01-08  10:05:34  kernel: [144290.765813] CPU3:\n2012-01-09  10:05:34  kernel: [144290.765816] CPU0:\n2012-01-01  10:05:34  kernel: [144290.765819] CPU7:\n2012-01-02  10:05:34  kernel: [144290.765822] CPU1:\n2012-01-03  10:05:34  kernel: [144290.765825] CPU4:\n2012-01-04  10:05:34  kernel: [144290.765827] CPU5:\n2012-01-05  10:05:34  kernel: [144290.765829] CPU6:\n2012-01-06  10:05:34  kernel: [144290.765832] CPU2:\n2012-01-07  10:05:39  AptDaemon.Trans: INFO: Cancelling\n2012-01-08  10:05:40  AptDaemon.Worker: INFO: Finished\n2012-01-09  10:05:54  kernel: [144310.995421] [Hardware\n2012-01-01  10:06:40  AptDaemon.PackageKit: INFO: Initializing\n2012-01-02  10:06:40  AptDaemon.Worker: INFO: Simulating\n2012-01-03  10:06:40  AptDaemon.Worker: INFO: Processing\n2012-01-04  10:06:41  AptDaemon.PackageKit: INFO: Get\n2012-01-05  10:06:41  AptDaemon.Worker: INFO: Finished\n2012-01-06  10:12:33  AptDaemon: INFO: Quitting\n2012-01-07  10:12:33  AptDaemon: INFO: Quitting\n2012-01-08  10:15:44  kernel: [144899.845423] CPU6:\n2012-01-09  10:15:44  kernel: [144899.845427] CPU3:\n2012-01-01  10:15:44  kernel: [144899.845432] CPU0:\n2012-01-02  10:15:44  kernel: [144899.845436] CPU1:\n2012-01-03  10:15:44  kernel: [144899.845439] CPU2:\n2012-01-04  10:15:44  kernel: [144899.845442] CPU5:\n2012-01-05  10:15:44  kernel: [144899.845445] CPU4:\n2012-01-06  10:15:44  kernel: [144899.845449] CPU7:\n2012-01-07  10:15:44  kernel: [144899.845452] CPU2:\n2012-01-08  10:15:44  kernel: [144899.845455] CPU6:\n2012-01-09  10:15:44  kernel: [144899.846383] CPU6:\n2012-01-01  10:15:44  kernel: [144899.846385] CPU1:\n2012-01-02  10:15:44  kernel: [144899.846388] CPU3:\n2012-01-03  10:15:44  kernel: [144899.846390] CPU4:\n2012-01-04  10:15:44  kernel: [144899.846393] CPU7:\n2012-01-05  10:15:44  kernel: [144899.846395] CPU0:\n2012-01-06  10:15:44  kernel: [144899.846397] CPU2:\n2012-01-07  10:15:44  kernel: [144899.846399] CPU5:\n2012-01-08  10:15:44  kernel: [144899.846402] CPU2:\n2012-01-09  10:15:44  kernel: [144899.846404] CPU6:\n2012-01-01  10:17:01  CRON[16609]: (root) CMD\n2012-01-02  10:17:30  kernel: [145006.236581] [Hardware\n2012-01-03  10:32:27  NetworkManager[1127]: <info> (eth0):\n2012-01-04  10:32:27  kernel: [145902.179285] tg3\n2012-01-05  10:32:31  NetworkManager[1127]: <info> (eth0):\n2012-01-06  10:32:31  NetworkManager[1127]: <info> (eth0):\n2012-01-07  10:32:32  NetworkManager[1127]: <info> (eth0):\n2012-01-08  10:32:32  dnsmasq[16068]: exiting on\n2012-01-09  10:32:32  NetworkManager[1127]: <info> DNS:\n2012-01-01  10:32:32  NetworkManager[1127]: <info> (eth0):\n2012-01-02  10:32:32  dnsmasq[16617]: started, version\n2012-01-03  10:32:32  dnsmasq[16617]: compile time\n2012-01-04  10:32:32  dnsmasq[16617]: warning: no\n2012-01-05  10:32:32  kernel: [145906.703379] ADDRCONF(NETDEV_UP):\n2012-01-06  10:32:32  dbus[1092]: [system] Activating\n2012-01-07  10:32:32  dbus[1092]: [system] Successfully\n2012-01-08  10:32:32  kernel: [145906.924958] CPU0:\n2012-01-09  10:32:32  kernel: [145906.924963] CPU3:\n2012-01-01  10:32:32  kernel: [145906.924966] CPU4:\n2012-01-02  10:32:32  kernel: [145906.924970] CPU5:\n2012-01-03  10:32:32  kernel: [145906.924974] CPU1:\n2012-01-04  10:32:32  kernel: [145906.924977] CPU7:\n2012-01-05  10:32:32  kernel: [145906.924981] CPU2:\n2012-01-06  10:32:32  kernel: [145906.924984] CPU6:\n2012-01-07  10:32:32  kernel: [145906.924987] CPU2:\n2012-01-08  10:32:32  kernel: [145906.924989] CPU6:\n2012-01-09  10:32:32  kernel: [145906.925967] CPU4:\n2012-01-01  10:32:32  kernel: [145906.925969] CPU6:\n2012-01-02  10:32:32  kernel: [145906.925971] CPU2:\n2012-01-03  10:32:32  kernel: [145906.925973] CPU3:\n2012-01-04  10:32:32  kernel: [145906.925975] CPU5:\n2012-01-05  10:32:32  kernel: [145906.925977] CPU1:\n2012-01-06  10:32:32  kernel: [145906.925979] CPU0:\n2012-01-07  10:32:32  kernel: [145906.925982] CPU7:\n2012-01-08  10:32:32  kernel: [145906.925984] CPU6:\n2012-01-09  10:32:32  kernel: [145906.925985] CPU2:\n2012-01-01  10:33:13  NetworkManager[1127]: <info> (eth0):\n2012-01-02  10:33:13  NetworkManager[1127]: <info> (eth0):\n2012-01-03  10:33:13  NetworkManager[1127]: <info> Auto-activating\n2012-01-04  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-05  10:33:13  NetworkManager[1127]: <info> (eth0):\n2012-01-06  10:33:13  kernel: [145947.980648] tg3\n2012-01-07  10:33:13  kernel: [145947.980650] tg3\n2012-01-08  10:33:13  kernel: [145947.980652] tg3\n2012-01-09  10:33:13  kernel: [145947.980737] ADDRCONF(NETDEV_CHANGE):\n2012-01-01  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-02  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-03  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-04  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-05  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-06  10:33:13  NetworkManager[1127]: <info> (eth0):\n2012-01-07  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-08  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-09  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-01  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-02  10:33:13  NetworkManager[1127]: <info> (eth0):\n2012-01-03  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-04  10:33:13  NetworkManager[1127]: <info> dhclient\n2012-01-05  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-06  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-07  10:33:13  dhclient: Internet Systems\n2012-01-08  10:33:13  dhclient: Copyright 2004-2011\n2012-01-09  10:33:13  dhclient: All rights\n2012-01-01  10:33:13  dhclient: For info,\n2012-01-02  10:33:13  dhclient:  \n2012-01-03  10:33:13  NetworkManager[1127]: <info> (eth0):\n2012-01-04  10:33:13  dhclient: Listening on\n2012-01-05  10:33:13  dhclient: Sending on\n2012-01-06  10:33:13  dhclient: Sending on\n2012-01-07  10:33:13  dhclient: DHCPREQUEST of\n2012-01-08  10:33:13  dhclient: DHCPACK of\n2012-01-09  10:33:13  dhclient: bound to\n2012-01-01  10:33:13  NetworkManager[1127]: <info> (eth0):\n2012-01-02  10:33:13  NetworkManager[1127]: <info> address\n2012-01-03  10:33:13  NetworkManager[1127]: <info> prefix\n2012-01-04  10:33:13  NetworkManager[1127]: <info> gateway\n2012-01-05  10:33:13  NetworkManager[1127]: <info> hostname\n2012-01-06  10:33:13  NetworkManager[1127]: <info> nameserver\n2012-01-07  10:33:13  NetworkManager[1127]: <info> nameserver\n2012-01-08  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-09  10:33:13  NetworkManager[1127]: <info> Activation\n2012-01-01  10:33:14  dnsmasq[16617]: exiting on\n2012-01-02  10:33:14  NetworkManager[1127]: <info> DNS:\n2012-01-03  10:33:14  NetworkManager[1127]: <info> (eth0):\n2012-01-04  10:33:14  dnsmasq[16644]: started, version\n2012-01-05  10:33:14  dnsmasq[16644]: compile time\n2012-01-06  10:33:14  dnsmasq[16644]: using nameserver\n2012-01-07  10:33:14  dnsmasq[16644]: using nameserver\n2012-01-08  10:33:14  NetworkManager[1127]: <info> (eth0):\n2012-01-09  10:33:14  NetworkManager[1127]: <info> Policy\n2012-01-01  10:33:14  NetworkManager[1127]: <info> Activation\n2012-01-02  10:33:14  dbus[1092]: [system] Activating\n2012-01-03  10:33:14  NetworkManager[1127]: <info> Activation\n2012-01-04  10:33:14  dbus[1092]: [system] Successfully\n2012-01-05  10:33:23  kernel: [145958.164609] eth0:\n2012-01-06  10:33:24  ntpdate[16708]: adjust time\n2012-01-07  10:33:24  kernel: [145959.395445] [Hardware\n2012-01-08  10:33:33  NetworkManager[1127]: <info> (eth0):\n2012-01-09  10:33:33  NetworkManager[1127]: <info> Activation\n2012-01-01  10:33:33  NetworkManager[1127]: <info> Activation\n2012-01-02  10:33:33  NetworkManager[1127]: <info> Activation\n2012-01-03  10:43:49  kernel: [146583.435659] CPU2:\n2012-01-04  10:43:49  kernel: [146583.435663] CPU6:\n2012-01-05  10:43:49  kernel: [146583.435667] CPU7:\n2012-01-06  10:43:49  kernel: [146583.435670] CPU3:\n2012-01-07  10:43:49  kernel: [146583.435673] CPU4:\n2012-01-08  10:43:49  kernel: [146583.435677] CPU0:\n2012-01-09  10:43:49  kernel: [146583.435680] CPU6:\n2012-01-01  10:43:49  kernel: [146583.435683] CPU2:\n2012-01-02  10:43:49  kernel: [146583.435687] CPU5:\n2012-01-03  10:43:49  kernel: [146583.435690] CPU1:\n2012-01-04  10:43:49  kernel: [146583.436659] CPU6:\n2012-01-05  10:43:49  kernel: [146583.436661] CPU2:\n2012-01-06  10:43:49  kernel: [146583.436663] CPU4:\n2012-01-07  10:43:49  kernel: [146583.436665] CPU3:\n2012-01-08  10:43:49  kernel: [146583.436668] CPU7:\n2012-01-09  10:43:49  kernel: [146583.436670] CPU0:\n2012-01-01  10:43:49  kernel: [146583.436672] CPU2:\n2012-01-02  10:43:49  kernel: [146583.436674] CPU6:\n2012-01-03  10:43:49  kernel: [146583.436685] CPU1:\n2012-01-04  10:43:49  kernel: [146583.436688] CPU5:\n2012-01-05  10:45:00  kernel: [146654.791212] [Hardware\n2012-01-06  10:58:24  dbus[1092]: [system] Activating\n2012-01-07  10:58:24  AptDaemon: INFO: Initializing\n2012-01-08  10:58:24  dbus[1092]: [system] Successfully\n2012-01-09  10:58:24  AptDaemon.PackageKit: INFO: Initializing\n2012-01-01  10:58:24  AptDaemon: INFO: CommitPackages()\n2012-01-02  10:58:24  AptDaemon.Trans: INFO: Queuing\n2012-01-03  10:58:31  AptDaemon.Worker: INFO: Simulating\n2012-01-04  10:58:32  AptDaemon.Worker: INFO: Committing\n2012-01-05  10:58:32  AptDaemon.Worker: INFO: Processing\n2012-01-06  11:02:06  AptDaemon.Trans: INFO: Cancelling\n2012-01-07  11:02:08  AptDaemon.Worker: INFO: Finished\n2012-01-08  11:03:09  AptDaemon.PackageKit: INFO: Initializing\n2012-01-09  11:03:09  AptDaemon.Worker: INFO: Simulating\n2012-01-01  11:03:09  AptDaemon.Worker: INFO: Processing\n2012-01-02  11:03:09  AptDaemon.PackageKit: INFO: Get\n2012-01-03  11:03:09  AptDaemon.Worker: INFO: Finished\n2012-01-04  11:04:55  AptDaemon: INFO: CommitPackages()\n2012-01-05  11:04:55  AptDaemon.Trans: INFO: Queuing\n2012-01-06  11:05:00  AptDaemon.Worker: INFO: Simulating\n2012-01-07  11:05:00  AptDaemon.Worker: INFO: Committing\n2012-01-08  11:05:01  AptDaemon.Worker: INFO: Processing\n2012-01-09  11:16:31  AptDaemon.Trans: INFO: Cancelling\n2012-01-01  11:16:32  AptDaemon.Worker: INFO: Finished\n2012-01-02  11:17:01  CRON[16971]: (root) CMD\n2012-01-03  11:17:32  AptDaemon.PackageKit: INFO: Initializing\n2012-01-04  11:17:32  AptDaemon.Worker: INFO: Simulating\n2012-01-05  11:17:32  AptDaemon.Worker: INFO: Processing\n2012-01-06  11:17:33  AptDaemon.PackageKit: INFO: Get\n2012-01-07  11:17:33  AptDaemon.Worker: INFO: Finished\n2012-01-08  11:23:32  AptDaemon: INFO: Quitting\n2012-01-09  11:23:32  AptDaemon: INFO: Quitting\n2012-01-01  11:25:04  gnome-screensaver-dialog: pam_ecryptfs: pam_sm_authenticate:\n2012-01-02  11:25:18  NetworkManager[1127]: <info> sleep\n2012-01-03  11:25:18  NetworkManager[1127]: <info> sleeping\n2012-01-04  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-05  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-06  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-07  11:25:18  kernel: [149069.922286] tg3\n2012-01-08  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-09  11:25:18  dnsmasq[16644]: exiting on\n2012-01-01  11:25:18  NetworkManager[1127]: <info> DNS:\n2012-01-02  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-03  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-04  11:25:18  dnsmasq[17021]: started, version\n2012-01-05  11:25:18  dnsmasq[17021]: compile time\n2012-01-06  11:25:18  dnsmasq[17021]: warning: no\n2012-01-07  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-08  11:25:18  kernel: [149069.943676] ADDRCONF(NETDEV_UP):\n2012-01-09  11:25:18  NetworkManager[1127]: <info> (wlan0):\n2012-01-01  11:25:18  NetworkManager[1127]: <info> (wlan0):\n2012-01-02  11:25:18  dbus[1092]: [system] Activating\n2012-01-03  11:25:18  NetworkManager[1127]: <info> (eth0):\n2012-01-04  11:25:18  dbus[1092]: [system] Successfully\n2012-01-05  11:25:19  anacron[17112]: Anacron 2.3\n2012-01-06  11:25:19  anacron[17112]: Normal exit\n2012-01-07  11:25:19  NetworkManager[1127]: SCPlugin-Ifupdown: devices\n2012-01-08  11:25:19  NetworkManager[1127]: <info> radio\n2012-01-09  11:25:19  NetworkManager[1127]: <info> WiFi\n2012-01-01  11:25:20  kernel: [149071.669528] bcma-pci-bridge\n2012-01-02  11:41:37  kernel: [149074.113021] PM:\n2012-01-03  11:41:37  kernel: [149074.258012] PM:\n2012-01-04  11:41:37  kernel: [149074.258023] Freezing\n2012-01-05  11:41:37  kernel: [149074.274770] Freezing\n2012-01-06  11:41:37  kernel: [149074.290744] PM:\n2012-01-07  11:41:37  kernel: [149074.290797] Suspending\n2012-01-08  11:41:37  kernel: [149074.291460] sd\n2012-01-09  11:41:37  kernel: [149074.291526] apple-gmux\n2012-01-01  11:41:37  kernel: [149074.291565] sd\n2012-01-02  11:41:37  kernel: [149074.292207] snd_hda_intel\n2012-01-03  11:41:37  kernel: [149074.292219] [fglrx]\n2012-01-04  11:41:37  kernel: [149074.292257] pciehp\n2012-01-05  11:41:37  kernel: [149074.292293] [fglrx]\n2012-01-06  11:41:37  kernel: [149074.330712] uhci_hcd\n2012-01-07  11:41:37  kernel: [149074.330736] uhci_hcd\n2012-01-08  11:41:37  kernel: [149074.338654] ehci_hcd\n2012-01-09  11:41:37  kernel: [149074.354637] ehci_hcd\n2012-01-01  11:41:37  kernel: [149074.394719] snd_hda_intel\n2012-01-02  11:41:37  kernel: [149074.410580] PM:\n2012-01-03  11:41:37  kernel: [149074.920661] PM:\n2012-01-04  11:41:37  kernel: [149074.920679] PM:\n2012-01-05  11:41:37  kernel: [149074.920714] PM:\n2012-01-06  11:41:37  kernel: [149074.920979] ata_piix\n2012-01-07  11:41:37  kernel: [149074.934071] PM:\n2012-01-08  11:41:37  kernel: [149075.224839] [fglrx]\n2012-01-09  11:41:37  kernel: [149075.224841] [fglrx]\n2012-01-01  11:41:37  kernel: [149075.224916] PM:\n2012-01-02  11:41:37  kernel: [149075.224964] PM:\n2012-01-03  11:41:37  kernel: [149075.225034] PM:\n2012-01-04  11:41:37  kernel: [149075.225041] PM:\n2012-01-05  11:41:37  kernel: [149075.225044] PM:\n2012-01-06  11:41:37  kernel: [149075.225460] ehci_hcd\n2012-01-07  11:41:37  kernel: [149075.225467] ehci_hcd\n2012-01-08  11:41:37  kernel: [149075.238178] ehci_hcd\n2012-01-09  11:41:37  kernel: [149075.238188] ehci_hcd\n2012-01-01  11:41:37  kernel: [149075.269910] PM:\n2012-01-02  11:41:37  kernel: [149075.270103] ACPI:\n2012-01-03  11:41:37  kernel: [149075.309888] PM:\n2012-01-04  11:41:37  kernel: [149075.310033] Disabling\n2012-01-05  11:41:37  kernel: [149075.413683] CPU\n2012-01-06  11:41:37  kernel: [149075.517580] CPU\n2012-01-07  11:41:37  kernel: [149075.621476] CPU\n2012-01-08  11:41:37  kernel: [149075.725376] CPU\n2012-01-09  11:41:37  kernel: [149075.829271] CPU\n2012-01-01  11:41:37  kernel: [149075.933171] CPU\n2012-01-02  11:41:37  kernel: [149076.037069] CPU\n2012-01-03  11:41:37  kernel: [149076.037411] Extended\n2012-01-04  11:41:37  kernel: [149076.037683] ACPI:\n2012-01-05  11:41:37  kernel: [149076.037723] PM:\n2012-01-06  11:41:37  kernel: [149076.038031] Extended\n2012-01-07  11:41:37  kernel: [149076.038071] Enabling\n2012-01-08  11:41:37  kernel: [149076.038169] Booting\n2012-01-09  11:41:37  kernel: [149076.038171] smpboot\n2012-01-01  11:41:37  kernel: [149076.048481] Initializing\n2012-01-02  11:41:37  kernel: [149076.049185] Calibrating\n2012-01-03  11:41:37  kernel: [149076.069509] NMI\n2012-01-04  11:41:37  kernel: [149076.070168] CPU1\n2012-01-05  11:41:37  kernel: [149076.070245] Booting\n2012-01-06  11:41:37  kernel: [149076.070247] smpboot\n2012-01-07  11:41:37  kernel: [149076.080542] Initializing\n2012-01-08  11:41:37  kernel: [149076.081260] Calibrating\n2012-01-09  11:41:37  kernel: [149076.101586] NMI\n2012-01-01  11:41:37  kernel: [149076.102306] CPU2\n2012-01-02  11:41:37  kernel: [149076.102379] Booting\n2012-01-03  11:41:37  kernel: [149076.102381] smpboot\n2012-01-04  11:41:37  kernel: [149076.112677] Initializing\n2012-01-05  11:41:37  kernel: [149076.113395] Calibrating\n2012-01-06  11:41:37  kernel: [149076.133822] NMI\n2012-01-07  11:41:37  kernel: [149076.134548] CPU3\n2012-01-08  11:41:37  kernel: [149076.134619] Booting\n2012-01-09  11:41:37  kernel: [149076.134621] smpboot\n2012-01-01  11:41:37  kernel: [149076.144917] Initializing\n2012-01-02  11:41:37  kernel: [149076.145634] Calibrating\n2012-01-03  11:41:37  kernel: [149076.166190] NMI\n2012-01-04  11:41:37  kernel: [149076.166995] CPU4\n2012-01-05  11:41:37  kernel: [149076.167157] Booting\n2012-01-06  11:41:37  kernel: [149076.167159] smpboot\n2012-01-07  11:41:37  kernel: [149076.177441] Initializing\n2012-01-08  11:41:37  kernel: [149076.178171] Calibrating\n2012-01-09  11:41:37  kernel: [149076.198875] NMI\n2012-01-01  11:41:37  kernel: [149076.199832] CPU5\n2012-01-02  11:41:37  kernel: [149076.200194] Booting\n2012-01-03  11:41:37  kernel: [149076.200196] smpboot\n2012-01-04  11:41:37  kernel: [149076.210499] Initializing\n2012-01-05  11:41:37  kernel: [149076.211210] Calibrating\n2012-01-06  11:41:37  kernel: [149076.232001] NMI\n2012-01-07  11:41:37  kernel: [149076.232992] CPU6\n2012-01-08  11:41:37  kernel: [149076.233154] Booting\n2012-01-09  11:41:37  kernel: [149076.233155] smpboot\n2012-01-01  11:41:37  kernel: [149076.243438] Initializing\n2012-01-02  11:41:37  kernel: [149076.244168] Calibrating\n2012-01-03  11:41:37  kernel: [149076.265066] NMI\n2012-01-04  11:41:37  kernel: [149076.266094] CPU7\n2012-01-05  11:41:37  kernel: [149076.273980] ACPI:\n2012-01-06  11:41:37  kernel: [149077.228656] pcieport\n2012-01-07  11:41:37  kernel: [149077.228660] pcieport\n2012-01-08  11:41:37  kernel: [149077.228663] pcieport\n2012-01-09  11:41:37  kernel: [149077.228665] pcieport\n2012-01-01  11:41:37  kernel: [149077.228668] pcieport\n2012-01-02  11:41:37  kernel: [149077.228670] pcieport\n2012-01-03  11:41:37  kernel: [149077.228687] pcieport\n2012-01-04  11:41:37  kernel: [149077.228690] pcieport\n2012-01-05  11:41:37  kernel: [149077.228692] pcieport\n2012-01-06  11:41:37  kernel: [149077.228695] pcieport\n2012-01-07  11:41:37  kernel: [149077.228697] pcieport\n2012-01-08  11:41:37  kernel: [149077.228699] pcieport\n2012-01-09  11:41:37  kernel: [149077.228702] pcieport\n2012-01-01  11:41:37  kernel: [149077.228718] mei\n2012-01-02  11:41:37  kernel: [149077.228731] mei\n2012-01-03  11:41:37  kernel: [149077.228749] uhci_hcd\n2012-01-04  11:41:37  kernel: [149077.228759] uhci_hcd\n2012-01-05  11:41:37  kernel: [149077.228768] uhci_hcd\n2012-01-06  11:41:37  kernel: [149077.228788] ehci_hcd\n2012-01-07  11:41:37  kernel: [149077.228803] ehci_hcd\n2012-01-08  11:41:37  kernel: [149077.228809] ehci_hcd\n2012-01-09  11:41:37  kernel: [149077.228825] ehci_hcd\n2012-01-01  11:41:37  kernel: [149077.228829] ehci_hcd\n2012-01-02  11:41:37  kernel: [149077.228842] snd_hda_intel\n2012-01-03  11:41:37  kernel: [149077.228854] snd_hda_intel\n2012-01-04  11:41:37  kernel: [149077.228857] snd_hda_intel\n2012-01-05  11:41:37  kernel: [149077.228862] snd_hda_intel\n2012-01-06  11:41:37  kernel: [149077.228886] pcieport\n2012-01-07  11:41:37  kernel: [149077.228895] pcieport\n2012-01-08  11:41:37  kernel: [149077.228899] pcieport\n2012-01-09  11:41:37  kernel: [149077.228903] pcieport\n2012-01-01  11:41:37  kernel: [149077.228907] pcieport\n2012-01-02  11:41:37  kernel: [149077.228913] pcieport\n2012-01-03  11:41:37  kernel: [149077.228918] pcieport\n2012-01-04  11:41:37  kernel: [149077.228955] pcieport\n2012-01-05  11:41:37  kernel: [149077.228964] pcieport\n2012-01-06  11:41:37  kernel: [149077.228968] pcieport\n2012-01-07  11:41:37  kernel: [149077.228972] pcieport\n2012-01-08  11:41:37  kernel: [149077.228976] pcieport\n2012-01-09  11:41:37  kernel: [149077.228982] pcieport\n2012-01-01  11:41:37  kernel: [149077.228986] pcieport\n2012-01-02  11:41:37  kernel: [149077.229025] pcieport\n2012-01-03  11:41:37  kernel: [149077.229034] pcieport\n2012-01-04  11:41:37  kernel: [149077.229038] pcieport\n2012-01-05  11:41:37  kernel: [149077.229045] pcieport\n2012-01-06  11:41:37  kernel: [149077.229050] pcieport\n2012-01-07  11:41:37  kernel: [149077.229088] pcieport\n2012-01-08  11:41:37  kernel: [149077.229097] pcieport\n2012-01-09  11:41:37  kernel: [149077.229101] pcieport\n2012-01-01  11:41:37  kernel: [149077.229105] pcieport\n2012-01-02  11:41:37  kernel: [149077.229109] pcieport\n2012-01-03  11:41:37  kernel: [149077.229115] pcieport\n2012-01-04  11:41:37  kernel: [149077.229119] pcieport\n2012-01-05  11:41:37  kernel: [149077.229150] uhci_hcd\n2012-01-06  11:41:37  kernel: [149077.229160] uhci_hcd\n2012-01-07  11:41:37  kernel: [149077.229169] uhci_hcd\n2012-01-08  11:41:37  kernel: [149077.229189] ehci_hcd\n2012-01-09  11:41:37  kernel: [149077.229203] ehci_hcd\n2012-01-01  11:41:37  kernel: [149077.229209] ehci_hcd\n2012-01-02  11:41:37  kernel: [149077.229223] ehci_hcd\n2012-01-03  11:41:37  kernel: [149077.229227] ehci_hcd\n2012-01-04  11:41:37  kernel: [149077.229268] ata_piix\n2012-01-05  11:41:37  kernel: [149077.229277] ata_piix\n2012-01-06  11:41:37  kernel: [149077.229281] ata_piix\n2012-01-07  11:41:37  kernel: [149077.229284] ata_piix\n2012-01-08  11:41:37  kernel: [149077.229288] ata_piix\n2012-01-09  11:41:37  kernel: [149077.229292] ata_piix\n2012-01-01  11:41:37  kernel: [149077.229297] ata_piix\n2012-01-02  11:41:37  kernel: [149077.229309] pci\n2012-01-03  11:41:37  kernel: [149077.229322] pci\n2012-01-04  11:41:37  kernel: [149077.229327] pci\n2012-01-05  11:41:37  kernel: [149077.229347] fglrx_pci\n2012-01-06  11:41:37  kernel: [149077.229352] fglrx_pci\n2012-01-07  11:41:37  kernel: [149077.229358] fglrx_pci\n2012-01-08  11:41:37  kernel: [149077.229363] fglrx_pci\n2012-01-09  11:41:37  kernel: [149077.229367] fglrx_pci\n2012-01-01  11:41:37  kernel: [149077.229370] fglrx_pci\n2012-01-02  11:41:37  kernel: [149077.229374] fglrx_pci\n2012-01-03  11:41:37  kernel: [149077.229410] snd_hda_intel\n2012-01-04  11:41:37  kernel: [149077.229423] snd_hda_intel\n2012-01-05  11:41:37  kernel: [149077.229426] snd_hda_intel\n2012-01-06  11:41:37  kernel: [149077.229431] snd_hda_intel\n2012-01-07  11:41:37  kernel: [149077.229519] tg3\n2012-01-08  11:41:37  kernel: [149077.229544] tg3\n2012-01-09  11:41:37  kernel: [149077.229552] tg3\n2012-01-01  11:41:37  kernel: [149077.229558] tg3\n2012-01-02  11:41:37  kernel: [149077.229566] tg3\n2012-01-03  11:41:37  kernel: [149077.229659] pci\n2012-01-04  11:41:37  kernel: [149077.229698] pci\n2012-01-05  11:41:37  kernel: [149077.229707] pci\n2012-01-06  11:41:37  kernel: [149077.229719] pci\n2012-01-07  11:41:37  kernel: [149077.229788] firewire_ohci\n2012-01-08  11:41:37  kernel: [149077.229820] firewire_ohci\n2012-01-09  11:41:37  kernel: [149077.229827] firewire_ohci\n2012-01-01  11:41:37  kernel: [149077.229916] PM:\n2012-01-02  11:41:37  kernel: [149077.229991] uhci_hcd\n2012-01-03  11:41:37  kernel: [149077.229999] uhci_hcd\n2012-01-04  11:41:37  kernel: [149077.230025] ehci_hcd\n2012-01-05  11:41:37  kernel: [149077.230027] usb\n2012-01-06  11:41:37  kernel: [149077.230033] mei\n2012-01-07  11:41:37  kernel: [149077.230035] ehci_hcd\n2012-01-08  11:41:37  kernel: [149077.230043] snd_hda_intel\n2012-01-09  11:41:37  kernel: [149077.230049] snd_hda_intel\n2012-01-01  11:41:37  kernel: [149077.230072] uhci_hcd\n2012-01-02  11:41:37  kernel: [149077.230075] ehci_hcd\n2012-01-03  11:41:37  kernel: [149077.230080] pciehp\n2012-01-04  11:41:37  kernel: [149077.230087] ata_piix\n2012-01-05  11:41:37  kernel: [149077.230090] uhci_hcd\n2012-01-06  11:41:37  kernel: [149077.230092] ehci_hcd\n2012-01-07  11:41:37  kernel: [149077.230097] ata_piix\n2012-01-08  11:41:37  kernel: [149077.230121] snd_hda_intel\n2012-01-09  11:41:37  kernel: [149077.230140] usb\n2012-01-01  11:41:37  kernel: [149077.230143] snd_hda_intel\n2012-01-02  11:41:37  kernel: [149077.230175] snd_hda_intel\n2012-01-03  11:41:37  kernel: [149077.230230] fglrx_pci\n2012-01-04  11:41:37  kernel: [149077.230268] snd_hda_intel\n2012-01-05  11:41:37  kernel: [149077.233469] sd\n2012-01-06  11:41:37  kernel: [149077.235355] [fglrx]\n2012-01-07  11:41:37  kernel: [149077.235534] [fglrx]\n2012-01-08  11:41:37  kernel: [149077.280813] [fglrx]\n2012-01-09  11:41:37  kernel: [149077.280889] [fglrx]\n2012-01-01  11:41:37  kernel: [149077.284586] firewire_ohci\n2012-01-02  11:41:37  kernel: [149077.284829] firewire_core:\n2012-01-03  11:41:37  kernel: [149077.348453] PM:\n2012-01-04  11:41:37  kernel: [149077.348457] PM:\n2012-01-05  11:41:37  kernel: [149077.348460] PM:\n2012-01-06  11:41:37  kernel: [149077.348464] PM:\n2012-01-07  11:41:37  kernel: [149077.348474] PM:\n2012-01-08  11:41:37  kernel: [149077.348477] PM:\n2012-01-09  11:41:37  kernel: [149077.353290] PM:\n2012-01-01  11:41:37  kernel: [149077.353293] PM:\n2012-01-02  11:41:37  kernel: [149077.353307] PM:\n2012-01-03  11:41:37  kernel: [149077.353310] PM:\n2012-01-04  11:41:37  kernel: [149077.353313] PM:\n2012-01-05  11:41:37  kernel: [149077.353316] PM:\n2012-01-06  11:41:37  kernel: [149077.353319] PM:\n2012-01-07  11:41:37  kernel: [149077.353321] PM:\n2012-01-08  11:41:37  kernel: [149077.353324] PM:\n2012-01-09  11:41:37  kernel: [149077.353327] PM:\n2012-01-01  11:41:37  kernel: [149077.353646] PM:\n2012-01-02  11:41:37  kernel: [149077.353650] PM:\n2012-01-03  11:41:37  kernel: [149077.353686] PM:\n2012-01-04  11:41:37  kernel: [149077.370456] PM:\n2012-01-05  11:41:37  kernel: [149077.401047] PM:\n2012-01-06  11:41:37  kernel: [149077.401052] PM:\n2012-01-07  11:41:37  kernel: [149077.401056] PM:\n2012-01-08  11:41:37  kernel: [149077.401059] PM:\n2012-01-09  11:41:37  kernel: [149077.401062] PM:\n2012-01-01  11:41:37  kernel: [149077.401067] PM:\n2012-01-02  11:41:37  kernel: [149077.401069] PM:\n2012-01-03  11:41:37  kernel: [149077.401078] PM:\n2012-01-04  11:41:37  kernel: [149077.401084] PM:\n2012-01-05  11:41:37  kernel: [149077.401087] PM:\n2012-01-06  11:41:37  kernel: [149077.401091] PM:\n2012-01-07  11:41:37  kernel: [149077.401094] PM:\n2012-01-08  11:41:37  kernel: [149077.784066] firewire_core:\n2012-01-09  11:41:37  kernel: [149078.575242] ata1.01:\n2012-01-01  11:41:37  kernel: [149078.575356] ata2.01:\n2012-01-02  11:41:37  kernel: [149078.731176] ata2.00:\n2012-01-03  11:41:37  kernel: [149078.731190] ata2.01:\n2012-01-04  11:41:37  kernel: [149078.731201] ata2.01:\n2012-01-05  11:41:37  kernel: [149078.739345] ata2.00:\n2012-01-06  11:41:37  kernel: [149078.755319] ata2.00:\n2012-01-07  11:41:37  kernel: [149079.010899] ata1.00:\n2012-01-08  11:41:37  kernel: [149079.010911] ata1.01:\n2012-01-09  11:41:37  kernel: [149079.019081] ata1.00:\n2012-01-01  11:41:37  kernel: [149079.035295] ata1.00:\n2012-01-02  11:41:37  kernel: [149079.060709] PM:\n2012-01-03  11:41:37  kernel: [149079.060745] PM:\n2012-01-04  11:41:37  kernel: [149079.060749] PM:\n2012-01-05  11:41:37  kernel: [149079.061816] PM:\n2012-01-06  11:41:37  kernel: [149079.061870] PM:\n2012-01-07  11:41:37  kernel: [149079.061899] PM:\n2012-01-08  11:41:37  kernel: [149079.061900] Restarting\n2012-01-09  11:41:37  anacron[17778]: Anacron 2.3\n2012-01-01  11:41:37  anacron[17778]: Normal exit\n2012-01-02  11:41:37  kernel: [149079.280801] bcma-pci-bridge\n2012-01-03  11:41:37  kernel: [149079.280815] bcma-pci-bridge\n2012-01-04  11:41:37  kernel: [149079.280867] bcma:\n2012-01-05  11:41:37  kernel: [149079.280892] bcma:\n2012-01-06  11:41:37  kernel: [149079.280948] bcma:\n2012-01-07  11:41:37  kernel: [149079.281076] bcma:\n2012-01-08  11:41:37  kernel: [149079.354368] bcma:\n2012-01-09  11:41:37  kernel: [149079.357149] cfg80211:\n2012-01-01  11:41:37  kernel: [149079.362622] cfg80211:\n2012-01-02  11:41:37  kernel: [149079.362625] cfg80211:\n2012-01-03  11:41:37  kernel: [149079.362627] cfg80211:\n2012-01-04  11:41:37  kernel: [149079.362629] cfg80211:\n2012-01-05  11:41:37  kernel: [149079.362630] cfg80211:\n2012-01-06  11:41:37  kernel: [149079.362632] cfg80211:\n2012-01-07  11:41:37  kernel: [149079.362633] cfg80211:\n2012-01-08  11:41:37  kernel: [149079.365442] b43-phy0:\n2012-01-09  11:41:37  kernel: [149079.366080] cfg80211:\n2012-01-01  11:41:37  kernel: [149079.366083] cfg80211:\n2012-01-02  11:41:37  kernel: [149079.366084] cfg80211:\n2012-01-03  11:41:37  kernel: [149079.366086] cfg80211:\n2012-01-04  11:41:37  kernel: [149079.366087] cfg80211:\n2012-01-05  11:41:37  kernel: [149079.366089] cfg80211:\n2012-01-06  11:41:37  kernel: [149079.366091] cfg80211:\n2012-01-07  11:41:37  kernel: [149079.366092] cfg80211:\n2012-01-08  11:41:37  kernel: [149079.366094] cfg80211:\n2012-01-09  11:41:37  kernel: [149079.366096] cfg80211:\n2012-01-01  11:41:37  kernel: [149079.366097] cfg80211:\n2012-01-02  11:41:37  kernel: [149079.366099] cfg80211:\n2012-01-03  11:41:37  kernel: [149079.366100] cfg80211:\n2012-01-04  11:41:37  kernel: [149079.366102] cfg80211:\n2012-01-05  11:41:37  kernel: [149079.366103] cfg80211:\n2012-01-06  11:41:37  kernel: [149079.366105] cfg80211:\n2012-01-07  11:41:37  kernel: [149079.366107] cfg80211:\n2012-01-08  11:41:37  kernel: [149079.366108] cfg80211:\n2012-01-09  11:41:37  kernel: [149079.366110] cfg80211:\n2012-01-01  11:41:37  kernel: [149079.366111] cfg80211:\n2012-01-02  11:41:37  kernel: [149079.366113] cfg80211:\n2012-01-03  11:41:37  kernel: [149079.366115] cfg80211:\n2012-01-04  11:41:37  kernel: [149079.366116] cfg80211:\n2012-01-05  11:41:37  kernel: [149079.366118] cfg80211:\n2012-01-06  11:41:37  kernel: [149079.366119] cfg80211:\n2012-01-07  11:41:37  kernel: [149079.366121] cfg80211:\n2012-01-08  11:41:37  kernel: [149079.366122] cfg80211:\n2012-01-09  11:41:37  kernel: [149079.366124] cfg80211:\n2012-01-01  11:41:37  kernel: [149079.366216] ieee80211\n2012-01-02  11:41:37  kernel: [149079.366616] Broadcom\n2012-01-03  11:41:37  NetworkManager[1127]: <info> found\n2012-01-04  11:41:37  NetworkManager[1127]: <info> WiFi\n2012-01-05  11:41:37  NetworkManager[1127]: SCPlugin-Ifupdown: devices\n2012-01-06  11:41:37  NetworkManager[1127]: SCPlugin-Ifupdown: device\n2012-01-07  11:41:37  NetworkManager[1127]: <info> (wlan0):\n2012-01-08  11:41:37  NetworkManager[1127]: <warn> (wlan0):\n2012-01-09  11:41:37  NetworkManager[1127]: <info> (wlan0):\n2012-01-01  11:41:37  NetworkManager[1127]: <info> (wlan0):\n2012-01-02  11:41:37  pulseaudio[2813]: [pulseaudio] module-console-kit.c:\n2012-01-03  11:41:38  NetworkManager[1127]: <info> wake\n2012-01-04  11:41:38  NetworkManager[1127]: <info> waking\n2012-01-05  11:41:38  NetworkManager[1127]: <info> (eth0):\n2012-01-06  11:41:38  NetworkManager[1127]: <info> (eth0):\n2012-01-07  11:41:38  NetworkManager[1127]: <info> (eth0):\n2012-01-08  11:41:38  kernel: [149079.666712] tg3\n2012-01-09  11:41:38  kernel: [149079.666718] tg3\n2012-01-01  11:41:38  kernel: [149079.666723] tg3\n2012-01-02  11:41:38  kernel: [149079.666727] tg3\n2012-01-03  11:41:38  kernel: [149079.666731] tg3\n2012-01-04  11:41:39  NetworkManager[1127]: <info> (eth0):\n2012-01-05  11:41:39  NetworkManager[1127]: <info> (eth0):\n2012-01-06  11:41:39  NetworkManager[1127]: <info> Unmanaged\n2012-01-07  11:41:39  NetworkManager[1127]: <info> Unmanaged\n2012-01-08  11:41:39  NetworkManager[1127]: <info> (wlan0):\n2012-01-09  11:41:39  kernel: [149080.696203] ADDRCONF(NETDEV_UP):\n2012-01-01  11:41:39  kernel: [149080.696984] ADDRCONF(NETDEV_UP):\n2012-01-02  11:41:39  NetworkManager[1127]: <info> (wlan0):\n2012-01-03  11:41:39  NetworkManager[1127]: <info> (wlan0):\n2012-01-04  11:41:39  NetworkManager[1127]: <info> (wlan0):\n2012-01-05  11:41:51  kernel: [149093.289101] usb\n2012-01-06  11:41:51  mtp-probe: checking bus\n2012-01-07  11:41:51  mtp-probe: bus: 2,\n2012-01-08  11:41:51  kernel: [149093.412961] scsi18\n2012-01-09  11:41:51  kernel: [149093.413315] scsi19\n2012-01-01  11:41:52  kernel: [149094.415839] scsi\n2012-01-02  11:41:52  kernel: [149094.418988] scsi\n2012-01-03  11:41:52  kernel: [149094.427538] sr1:\n2012-01-04  11:41:52  kernel: [149094.427938] sr\n2012-01-05  11:41:52  kernel: [149094.428204] sr\n2012-01-06  11:41:52  kernel: [149094.429028] sd\n2012-01-07  11:41:52  kernel: [149094.439790] sd\n2012-01-08  11:41:53  usb_modeswitch: switching device\n2012-01-09  11:41:53  kernel: [149094.623497] usb\n2012-01-01  11:41:56  gnome-screensaver-dialog: pam_ecryptfs: pam_sm_authenticate:\n2012-01-02  11:41:59  kernel: [149100.961756] usb\n2012-01-03  11:41:59  mtp-probe: checking bus\n2012-01-04  11:41:59  kernel: [149101.085787] option\n2012-01-05  11:41:59  kernel: [149101.086042] usb\n2012-01-06  11:41:59  kernel: [149101.086506] option\n2012-01-07  11:41:59  kernel: [149101.086813] usb\n2012-01-08  11:41:59  kernel: [149101.087252] option\n2012-01-09  11:41:59  kernel: [149101.087510] usb\n2012-01-01  11:41:59  kernel: [149101.088432] scsi23\n2012-01-02  11:41:59  kernel: [149101.090303] scsi24\n2012-01-03  11:41:59  mtp-probe: bus: 2,\n2012-01-04  11:41:59  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-05  11:42:00  kernel: [149102.088636] scsi\n2012-01-06  11:42:00  kernel: [149102.094152] scsi\n2012-01-07  11:42:00  usb_modeswitch: switched to\n2012-01-08  11:42:00  kernel: [149102.103624] sr1:\n2012-01-09  11:42:00  kernel: [149102.103784] sr\n2012-01-01  11:42:00  kernel: [149102.103864] sr\n2012-01-02  11:42:00  kernel: [149102.104437] sd\n2012-01-03  11:42:00  kernel: [149102.114620] sd\n2012-01-04  11:42:01  usb_modeswitch[18278]: usb_modeswitch: switched\n2012-01-05  11:42:01  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-06  11:42:01  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-07  11:42:01  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-08  11:42:01  modem-manager[1113]: <info> (Huawei):\n2012-01-09  11:42:02  modem-manager[1113]: <info> (ttyUSB1)\n2012-01-01  11:42:02  modem-manager[1113]: <info> (ttyUSB2)\n2012-01-02  11:42:06  modem-manager[1113]: <info> (ttyUSB2)\n2012-01-03  11:42:06  modem-manager[1113]: <info> (ttyUSB2)\n2012-01-04  11:42:06  modem-manager[1113]: <info> (Huawei):\n2012-01-05  11:42:06  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-06  11:42:06  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-07  11:42:09  modem-manager[1113]: <info> (ttyUSB1)\n2012-01-08  11:42:09  modem-manager[1113]: <info> (ttyUSB1)\n2012-01-09  11:42:09  modem-manager[1113]: <info> (Huawei):\n2012-01-01  11:42:09  NetworkManager[1127]: <warn> (ttyUSB0):\n2012-01-02  11:42:09  NetworkManager[1127]: <info> WWAN\n2012-01-03  11:42:09  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-04  11:42:09  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-05  11:42:09  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-06  11:42:09  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-07  11:42:09  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-08  11:42:09  NetworkManager[1127]: nm_system_iface_flush_routes: assertion\n2012-01-09  11:42:09  NetworkManager[1127]: nm_system_iface_flush_addresses: assertion\n2012-01-01  11:42:09  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-02  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-03  11:42:13  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-04  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-05  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-06  11:42:13  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-07  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-08  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-09  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-01  11:42:13  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-02  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-03  11:42:13  modem-manager[1113]: <info> (ttyUSB0)\n2012-01-04  11:42:13  modem-manager[1113]: <info> Modem\n2012-01-05  11:42:13  modem-manager[1113]: <info> (ttyUSB2)\n2012-01-06  11:42:13  modem-manager[1113]: <info> (ttyUSB0):\n2012-01-07  11:42:13  modem-manager[1113]: <info> Modem\n2012-01-08  11:42:13  NetworkManager[1127]: <info> WWAN\n2012-01-09  11:42:13  modem-manager[1113]: <info> Modem\n2012-01-01  11:42:13  modem-manager[1113]: <info> Modem\n2012-01-02  11:42:13  modem-manager[1113]: <info> Modem\n2012-01-03  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-04  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-05  11:42:13  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-06  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-07  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-08  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-09  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-01  11:42:13  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-02  11:42:13  NetworkManager[1127]: <info> starting\n2012-01-03  11:42:13  NetworkManager[1127]: <info> pppd\n2012-01-04  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-05  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-06  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-07  11:42:13  NetworkManager[1127]: <info> Activation\n2012-01-08  11:42:13  pppd[18397]: Plugin /usr/lib/pppd/2.4.5/nm-pppd-plugin.so\n2012-01-09  11:42:13  pppd[18397]: pppd 2.4.5\n2012-01-01  11:42:13  pppd[18397]: Using interface\n2012-01-02  11:42:13  pppd[18397]: Connect: ppp0\n2012-01-03  11:42:13  NetworkManager[1127]: SCPlugin-Ifupdown: devices\n2012-01-04  11:42:13  NetworkManager[1127]: SCPlugin-Ifupdown: device\n2012-01-05  11:42:13  pppd[18397]: PAP authentication\n2012-01-06  11:42:16  pppd[18397]: Could not\n2012-01-07  11:42:16  pppd[18397]: local IP\n2012-01-08  11:42:16  pppd[18397]: remote IP\n2012-01-09  11:42:16  pppd[18397]: primary DNS\n2012-01-01  11:42:16  pppd[18397]: secondary DNS\n2012-01-02  11:42:16  NetworkManager[1127]: <info> PPP\n2012-01-03  11:42:16  NetworkManager[1127]: <info> Activation\n2012-01-04  11:42:16  NetworkManager[1127]: <info> Activation\n2012-01-05  11:42:17  dnsmasq[17021]: exiting on\n2012-01-06  11:42:17  NetworkManager[1127]: <info> DNS:\n2012-01-07  11:42:17  NetworkManager[1127]: <info> (ppp0):\n2012-01-08  11:42:17  dnsmasq[18416]: started, version\n2012-01-09  11:42:17  dnsmasq[18416]: compile time\n2012-01-01  11:42:17  dnsmasq[18416]: using nameserver\n2012-01-02  11:42:17  dnsmasq[18416]: using nameserver\n2012-01-03  11:42:17  NetworkManager[1127]: <info> (ttyUSB0):\n2012-01-04  11:42:17  NetworkManager[1127]: <info> Policy\n2012-01-05  11:42:17  NetworkManager[1127]: <info> Activation\n2012-01-06  11:42:17  NetworkManager[1127]: <info> Activation\n2012-01-07  11:42:17  dbus[1092]: [system] Activating\n2012-01-08  11:42:17  dbus[1092]: [system] Successfully\n2012-01-09  11:42:28  ntpdate[18478]: step time\n"
  },
  {
    "path": "tests/stdin.03.txt",
    "content": "/var/log\n/var/log/ConsoleKit\n/var/log/ConsoleKit/history.1\n/var/log/ConsoleKit/history\n/var/log/apt\n/var/log/apt/term.log\n/var/log/apt/term.log.1.gz\n/var/log/apt/history.log\n/var/log/apt/history.log.1.gz\n/var/log/cups\n/var/log/cups/error_log\n/var/log/cups/page_log\n/var/log/cups/access_log.7.gz\n/var/log/cups/access_log.6.gz\n/var/log/cups/access_log.5.gz\n/var/log/cups/access_log.4.gz\n/var/log/cups/access_log.3.gz\n/var/log/cups/access_log.2.gz\n/var/log/cups/access_log\n/var/log/cups/access_log.1.gz\n/var/log/dist-upgrade\n/var/log/fsck\n/var/log/fsck/checkfs\n/var/log/fsck/checkroot\n/var/log/hp\n/var/log/lightdm\n/var/log/lightdm/lightdm.log\n/var/log/lightdm/x-0.log\n/var/log/lightdm/x-0-greeter.log.old\n/var/log/lightdm/x-1.log\n/var/log/lightdm/x-1-greeter.log\n/var/log/lightdm/x-0-greeter.log\n/var/log/samba\n/var/log/speech-dispatcher\n/var/log/unattended-upgrades\n/var/log/upstart\n/var/log/upstart/rsyslog.log.1.gz\n/var/log/upstart/ureadahead-other.log.4.gz\n/var/log/upstart/network-interface-ppp0.log.6.gz\n/var/log/upstart/isc-dhcp-server6.log.3.gz\n/var/log/upstart/modemmanager.log.2.gz\n/var/log/upstart/procps-virtual-filesystems.log.4.gz\n/var/log/upstart/procps-virtual-filesystems.log.3.gz\n/var/log/upstart/resolvconf.log.2.gz\n/var/log/upstart/mysql.log.5.gz\n/var/log/upstart/mysql.log.3.gz\n/var/log/upstart/mysql.log.2.gz\n/var/log/upstart/cups.log.4.gz\n/var/log/upstart/ureadahead-other.log.5.gz\n/var/log/upstart/container-detect.log.6.gz\n/var/log/upstart/cups.log.1.gz\n/var/log/upstart/alsa-restore.log.1.gz\n/var/log/upstart/rsyslog.log.3.gz\n/var/log/upstart/cryptdisks-enable.log.3.gz\n/var/log/upstart/hybrid-gfx.log.2.gz\n/var/log/upstart/mysql.log.1.gz\n/var/log/upstart/isc-dhcp-server6.log.4.gz\n/var/log/upstart/procps-static-network-up.log.4.gz\n/var/log/upstart/console-setup.log.3.gz\n/var/log/upstart/hybrid-gfx.log.6.gz\n/var/log/upstart/rsyslog.log.2.gz\n/var/log/upstart/resolvconf.log.1.gz\n/var/log/upstart/ureadahead-other.log.3.gz\n/var/log/upstart/procps-static-network-up.log.6.gz\n/var/log/upstart/rsyslog.log.4.gz\n/var/log/upstart/container-detect.log.7.gz\n/var/log/upstart/network-interface-wlan0.log.7.gz\n/var/log/upstart/container-detect.log.5.gz\n/var/log/upstart/container-detect.log.2.gz\n/var/log/upstart/isc-dhcp-server6.log.2.gz\n/var/log/upstart/cups.log.5.gz\n/var/log/upstart/cryptdisks-enable.log.6.gz\n/var/log/upstart/hybrid-gfx.log.5.gz\n/var/log/upstart/hybrid-gfx.log.4.gz\n/var/log/upstart/hybrid-gfx.log.3.gz\n/var/log/upstart/isc-dhcp-server6.log.5.gz\n/var/log/upstart/network-interface-ppp0.log.4.gz\n/var/log/upstart/network-interface-ppp0.log.3.gz\n/var/log/upstart/ureadahead.log.7.gz\n/var/log/upstart/network-interface-wlan0.log.6.gz\n/var/log/upstart/isc-dhcp-server.log.1.gz\n/var/log/upstart/container-detect.log.4.gz\n/var/log/upstart/container-detect.log.3.gz\n/var/log/upstart/network-interface-wlan0.log.5.gz\n/var/log/upstart/rsyslog.log.7.gz\n/var/log/upstart/modemmanager.log.7.gz\n/var/log/upstart/modemmanager.log.6.gz\n/var/log/upstart/console-setup.log.6.gz\n/var/log/upstart/failsafe-x.log.1.gz\n/var/log/upstart/procps-static-network-up.log.3.gz\n/var/log/upstart/procps-virtual-filesystems.log.7.gz\n/var/log/upstart/rsyslog.log.6.gz\n/var/log/upstart/ureadahead-other.log.2.gz\n/var/log/upstart/mysql.log.6.gz\n/var/log/upstart/mysql.log.4.gz\n/var/log/upstart/network-interface-wlan0.log.4.gz\n/var/log/upstart/procps-static-network-up.log.5.gz\n/var/log/upstart/procps-virtual-filesystems.log.2.gz\n/var/log/upstart/ureadahead.log.6.gz\n/var/log/upstart/ureadahead.log.3.gz\n/var/log/upstart/ureadahead.log.2.gz\n/var/log/upstart/ureadahead.log.1.gz\n/var/log/upstart/modemmanager.log.5.gz\n/var/log/upstart/ureadahead.log.4.gz\n/var/log/upstart/modemmanager.log\n/var/log/upstart/network-interface-wlan0.log.3.gz\n/var/log/upstart/network-interface-wlan0.log.2.gz\n/var/log/upstart/modemmanager.log.3.gz\n/var/log/upstart/console-setup.log.5.gz\n/var/log/upstart/procps-static-network-up.log.7.gz\n/var/log/upstart/console-setup.log.2.gz\n/var/log/upstart/cryptdisks-enable.log.5.gz\n/var/log/upstart/network-interface-tun0.log.5.gz\n/var/log/upstart/network-interface-ppp0.log.2.gz\n/var/log/upstart/network-interface-tun0.log.3.gz\n/var/log/upstart/modemmanager.log.4.gz\n/var/log/upstart/cups.log.6.gz\n/var/log/upstart/procps-static-network-up.log.2.gz\n/var/log/upstart/ureadahead.log.5.gz\n/var/log/upstart/mysql.log.7.gz\n/var/log/upstart/procps-virtual-filesystems.log.6.gz\n/var/log/upstart/procps-virtual-filesystems.log.5.gz\n/var/log/upstart/rsyslog.log.5.gz\n/var/log/upstart/cryptdisks-enable.log.7.gz\n/var/log/upstart/cups.log.3.gz\n/var/log/upstart/cups.log.2.gz\n/var/log/upstart/network-interface-tun0.log.4.gz\n/var/log/upstart/network-interface-tun0.log.1.gz\n/var/log/upstart/network-interface-ppp1.log.1.gz\n/var/log/upstart/network-interface-tun0.log.2.gz\n/var/log/upstart/console-setup.log.4.gz\n/var/log/upstart/cryptdisks-enable.log.4.gz\n/var/log/upstart/cryptdisks-enable.log.2.gz\n/var/log/upstart/hybrid-gfx.log.7.gz\n/var/log/upstart/isc-dhcp-server6.log.6.gz\n/var/log/upstart/isc-dhcp-server6.log.1.gz\n/var/log/upstart/modemmanager.log.1.gz\n/var/log/upstart/network-interface-lo.log.2.gz\n/var/log/upstart/network-interface-lo.log.1.gz\n/var/log/upstart/network-interface-ppp0.log.7.gz\n/var/log/upstart/network-interface-ppp0.log.5.gz\n/var/log/upstart/network-interface-tun0.log.7.gz\n/var/log/upstart/procps-static-network-up.log.1.gz\n/var/log/upstart/ureadahead-other.log.6.gz\n/var/log/upstart/ureadahead-other.log.1.gz\n/var/log/upstart/network-interface-ppp0.log\n/var/log/upstart/network-interface-wlan0.log\n/var/log/upstart/console-setup.log.7.gz\n/var/log/upstart/console-setup.log.1.gz\n/var/log/upstart/container-detect.log.1.gz\n/var/log/upstart/hybrid-gfx.log.1.gz\n/var/log/upstart/network-interface-ppp0.log.1.gz\n/var/log/upstart/procps-virtual-filesystems.log.1.gz\n/var/log/upstart/network-interface-tun1.log.1.gz\n/var/log/upstart/cryptdisks-enable.log.1.gz\n/var/log/upstart/isc-dhcp-server6.log.7.gz\n/var/log/upstart/network-interface-tun0.log.6.gz\n/var/log/upstart/network-interface-wlan0.log.1.gz\n/var/log/boot\n/var/log/bootstrap.log\n/var/log/dmesg\n/var/log/faillog\n/var/log/fontconfig.log\n/var/log/lastlog\n/var/log/installer\n/var/log/installer/syslog\n/var/log/installer/partman\n/var/log/installer/version\n/var/log/installer/casper.log\n/var/log/installer/debug\n/var/log/installer/media-info\n/var/log/installer/initial-status.gz\n/var/log/ufw.log\n/var/log/alternatives.log.1\n/var/log/mail.log\n/var/log/mail.err\n/var/log/news\n/var/log/news/news.crit\n/var/log/news/news.err\n/var/log/news/news.notice\n/var/log/jockey.log.7.gz\n/var/log/pm-powersave.log\n/var/log/jockey.log\n/var/log/aptitude\n/var/log/gdm\n/var/log/mysql\n/var/log/mysql.err\n/var/log/apache2\n/var/log/apache2/other_vhosts_access.log\n/var/log/apache2/access.log.1\n/var/log/apache2/access.log\n/var/log/apache2/error.log.2.gz\n/var/log/apache2/error.log.1\n/var/log/apache2/error.log\n/var/log/corosync\n/var/log/corosync/.empty\n/var/log/pycentral.log\n/var/log/dpkg.log.1\n/var/log/alternatives.log\n/var/log/Xorg.0.log.old\n/var/log/pm-suspend.log\n/var/log/pm-powersave.log.1\n/var/log/Xorg.1.log\n/var/log/pm-suspend.log.1\n/var/log/auth.log.3.gz\n/var/log/kern.log.1\n/var/log/kern.log\n/var/log/auth.log.1\n/var/log/udev\n/var/log/apport.log.7.gz\n/var/log/apport.log\n/var/log/mysql.log.4.gz\n/var/log/Xorg.failsafe.log.old\n/var/log/Xorg.failsafe.log\n/var/log/apport.log.3.gz\n/var/log/dmesg.4.gz\n/var/log/dmesg.3.gz\n/var/log/dmesg.2.gz\n/var/log/apport.log.6.gz\n/var/log/wtmp.1\n/var/log/boot.log\n/var/log/wtmp\n/var/log/btmp\n/var/log/aptitude.1.gz\n/var/log/auth.log\n/var/log/Xorg.0.log\n/var/log/kern.log.2.gz\n/var/log/jockey.log.1\n/var/log/btmp.1\n/var/log/apport.log.4.gz\n/var/log/jockey.log.8.gz\n/var/log/jockey.log.5.gz\n/var/log/auth.log.4.gz\n/var/log/apport.log.5.gz\n/var/log/kern.log.4.gz\n/var/log/kern.log.3.gz\n/var/log/jockey.log.9.gz\n/var/log/l2tpipsecvpn.pipe\n/var/log/jockey.log.6.gz\n/var/log/apport.log.2.gz\n/var/log/apport.log.1\n/var/log/jockey.log.10.gz\n/var/log/dpkg.log\n/var/log/mysql.log.2.gz\n/var/log/mysql.log\n/var/log/mysql.log.1.gz\n/var/log/syslog.5.gz\n/var/log/syslog.4.gz\n/var/log/syslog.7.gz\n/var/log/syslog.6.gz\n/var/log/syslog.2.gz\n/var/log/syslog.1\n/var/log/syslog\n/var/log/auth.log.2.gz\n/var/log/jockey.log.4.gz\n/var/log/jockey.log.3.gz\n/var/log/jockey.log.2.gz\n/var/log/syslog.3.gz\n/var/log/mysql.log.7.gz\n/var/log/mysql.log.5.gz\n/var/log/apparmor\n/var/log/dmesg.1.gz\n/var/log/dmesg.0\n/var/log/mysql.log.3.gz\n/var/log/mysql.log.6.gz\n"
  },
  {
    "path": "tests/stdin.04.txt",
    "content": "USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND\nroot         2  0.0  0.0      0     0 ?        S    15:30   0:00 [kthreadd]\nroot         3  0.0  0.0      0     0 ?        S    15:30   0:01  \\_ [ksoftirqd/0]\nroot         5  0.0  0.0      0     0 ?        S    15:30   0:00  \\_ [kworker/u:0]\nroot         6  0.0  0.0      0     0 ?        S    15:30   0:00  \\_ [migration/0]\nroot         7  0.0  0.0      0     0 ?        S    15:30   0:00  \\_ [watchdog/0]\nroot         8  0.0  0.0      0     0 ?        S    15:30   0:00  \\_ [migration/1]\nroot         9  0.0  0.0      0     0 ?        S    15:30   0:00  \\_ [kworker/1:0]\nroot        10  0.0  0.0      0     0 ?        S    15:30   0:00  \\_ [ksoftirqd/1]\nroot        12  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [watchdog/1]\nroot        13  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [migration/2]\nroot        15  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [ksoftirqd/2]\nroot        16  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [watchdog/2]\nroot        17  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [migration/3]\nroot        19  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [ksoftirqd/3]\nroot        20  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [watchdog/3]\nroot        21  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [migration/4]\nroot        23  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [ksoftirqd/4]\nroot        24  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [watchdog/4]\nroot        25  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [migration/5]\nroot        27  0.0  0.0      0     0 ?        S    15:31   0:00  \\_ [ksoftirqd/5]\nroot        28  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [watchdog/5]\nroot        29  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [migration/6]\nroot        31  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [ksoftirqd/6]\nroot        32  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [watchdog/6]\nroot        33  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [migration/7]\nroot        35  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [ksoftirqd/7]\nroot        36  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [watchdog/7]\nroot        37  0.0  0.0      0     0 ?        S<   15:32   0:00  \\_ [cpuset]\nroot        38  0.0  0.0      0     0 ?        S<   15:32   0:00  \\_ [khelper]\nroot        39  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [kdevtmpfs]\nroot        40  0.0  0.0      0     0 ?        S<   15:32   0:00  \\_ [netns]\nroot        42  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [sync_supers]\nroot        43  0.0  0.0      0     0 ?        S    15:32   0:00  \\_ [bdi-default]\nroot        44  0.0  0.0      0     0 ?        S<   15:33   0:00  \\_ [kintegrityd]\nroot        45  0.0  0.0      0     0 ?        S<   15:33   0:00  \\_ [kblockd]\nroot        46  0.0  0.0      0     0 ?        S<   15:33   0:00  \\_ [ata_sff]\nroot        47  0.0  0.0      0     0 ?        S    15:33   0:00  \\_ [khubd]\nroot        48  0.0  0.0      0     0 ?        S<   15:33   0:00  \\_ [md]\nroot        51  0.0  0.0      0     0 ?        S    15:33   0:00  \\_ [khungtaskd]\nroot        52  0.0  0.0      0     0 ?        S    15:33   0:00  \\_ [kswapd0]\nroot        53  0.0  0.0      0     0 ?        SN   15:33   0:00  \\_ [ksmd]\nroot        54  0.0  0.0      0     0 ?        SN   15:33   0:00  \\_ [khugepaged]\nroot        55  0.0  0.0      0     0 ?        S    15:33   0:00  \\_ [fsnotify_mark]\nroot        56  0.0  0.0      0     0 ?        S    15:33   0:00  \\_ [ecryptfs-kthrea]\nroot        57  0.0  0.0      0     0 ?        S<   15:33   0:00  \\_ [crypto]\nroot        65  0.0  0.0      0     0 ?        S<   15:33   0:00  \\_ [kthrotld]\nroot        67  0.0  0.0      0     0 ?        S    15:33   0:00  \\_ [scsi_eh_0]\nroot        68  0.0  0.0      0     0 ?        S    15:33   0:00  \\_ [scsi_eh_1]\nroot        69  0.0  0.0      0     0 ?        S    15:34   0:01  \\_ [kworker/2:1]\nroot        70  0.0  0.0      0     0 ?        S    15:34   0:00  \\_ [kworker/u:3]\nroot        89  0.0  0.0      0     0 ?        S<   15:34   0:00  \\_ [devfreq_wq]\nroot        90  0.0  0.0      0     0 ?        S    15:34   0:00  \\_ [kworker/7:1]\nroot        91  0.0  0.0      0     0 ?        S    15:34   0:00  \\_ [kworker/4:1]\nroot        92  0.0  0.0      0     0 ?        S    15:34   0:05  \\_ [kworker/1:1]\nroot        94  0.0  0.0      0     0 ?        S    15:34   0:00  \\_ [kworker/6:1]\nroot        97  0.0  0.0      0     0 ?        S    15:35   0:00  \\_ [kworker/5:1]\nroot       140  0.0  0.0      0     0 ?        S    15:35   0:00  \\_ [kworker/7:2]\nroot       231  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [firewire]\nroot       300  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [xfs_mru_cache]\nroot       301  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [xfslogd]\nroot       302  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [xfsdatad]\nroot       304  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [xfsconvertd]\nroot       306  0.0  0.0      0     0 ?        S    15:35   0:00  \\_ [xfsbufd/sda3]\nroot       307  0.0  0.0      0     0 ?        S    15:35   0:03  \\_ [xfsaild/sda3]\nroot       703  0.0  0.0      0     0 ?        S    15:35   0:00  \\_ [irq/47-mei]\nroot       718  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [applesmc-led]\nroot       722  0.0  0.0      0     0 ?        S    15:35   0:00  \\_ [kworker/5:2]\nroot       789  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [cfg80211]\nroot       834  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [hci0]\nroot       858  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [hd-audio0]\nroot       862  0.0  0.0      0     0 ?        S<   15:35   0:00  \\_ [hd-audio1]\nroot       986  0.0  0.0      0     0 ?        S<   15:36   0:00  \\_ [kdmflush]\nroot       994  0.0  0.0      0     0 ?        S<   15:36   0:00  \\_ [kcryptd_io]\nroot       995  0.0  0.0      0     0 ?        S<   15:36   0:00  \\_ [kcryptd]\nroot      1177  0.0  0.0      0     0 ?        S    15:36   0:00  \\_ [flush-8:0]\nroot      1279  0.0  0.0      0     0 ?        S<   15:36   0:00  \\_ [krfcommd]\nroot      1867  0.0  0.0      0     0 ?        S    15:36   0:00  \\_ [firegl]\nroot      1868  0.0  0.0      0     0 ?        S    15:36   0:00  \\_ [firegl]\nroot      1869  0.0  0.0      0     0 ?        S    15:36   0:00  \\_ [firegl]\nroot      1983  0.0  0.0      0     0 ?        S<   15:36   0:00  \\_ [iprt]\nroot      2677  0.0  0.0      0     0 ?        S    15:37   0:03  \\_ [kworker/2:2]\nroot      2826  0.0  0.0      0     0 ?        S    15:37   0:00  \\_ [kworker/6:2]\nroot      2840  0.0  0.0      0     0 ?        S    15:37   0:00  \\_ [kworker/4:2]\nroot      2914  0.0  0.0      0     0 ?        S    15:37   0:00  \\_ [scsi_eh_7]\nroot      2915  0.0  0.0      0     0 ?        S    15:37   0:01  \\_ [usb-storage]\nroot      2916  0.0  0.0      0     0 ?        S    15:37   0:00  \\_ [scsi_eh_8]\nroot      2917  0.0  0.0      0     0 ?        S    15:37   0:01  \\_ [usb-storage]\nroot      3046  0.1  0.0      0     0 ?        S    15:37   0:08  \\_ [flush-ecryptfs-]\nroot      3769  0.0  0.0      0     0 ?        S    15:41   0:05  \\_ [kworker/3:0]\nroot      4812  0.0  0.0      0     0 ?        S    17:31   0:01  \\_ [kworker/0:2]\nroot      4915  0.1  0.0      0     0 ?        S    17:39   0:01  \\_ [kworker/0:3]\nroot      4940  0.0  0.0      0     0 ?        S    17:43   0:00  \\_ [kworker/3:2]\nroot      4958  0.1  0.0      0     0 ?        S    17:47   0:00  \\_ [kworker/0:1]\nroot      5108  0.0  0.0      0     0 ?        S    17:49   0:00  \\_ [kworker/3:1]\nroot      5160  0.0  0.0      0     0 ?        S    17:51   0:00  \\_ [scsi_eh_9]\nroot      5161  0.0  0.0      0     0 ?        S    17:51   0:00  \\_ [usb-storage]\nroot      5190  0.0  0.0      0     0 ?        S    17:51   0:00  \\_ [kworker/7:0]\nroot      5195  0.0  0.0      0     0 ?        S    17:51   0:00  \\_ [xfsbufd/sdc1]\nroot      5198  0.0  0.0      0     0 ?        S    17:51   0:00  \\_ [xfsaild/sdc1]\nroot      5221  0.0  0.0      0     0 ?        S    17:51   0:00  \\_ [flush-8:32]\nroot         1  0.0  0.0   3720  2148 ?        Ss   15:35   0:01 /sbin/init\nroot       375  0.0  0.0   2816   612 ?        S    15:36   0:00 upstart-udev-bridge --daemon\nroot       377  0.0  0.0   3504  1696 ?        Ss   15:36   0:00 /sbin/udevd --daemon\nroot      5176  0.0  0.0   3500  1264 ?        S    17:51   0:00  \\_ /sbin/udevd --daemon\nroot      5177  0.0  0.0   3500  1220 ?        S    17:51   0:00  \\_ /sbin/udevd --daemon\nroot       890  0.0  0.0   2828   360 ?        S    15:36   0:00 upstart-socket-bridge --daemon\nroot      1048  0.0  0.0   6664  2416 ?        Ss   15:36   0:00 /usr/sbin/sshd -D\nsyslog    1109  0.0  0.0  31044  1372 ?        Sl   15:36   0:00 rsyslogd -c5\n102       1130  0.0  0.0   4372  2008 ?        Ss   15:36   0:01 dbus-daemon --system --fork --activation=upstart\nroot      1150  0.0  0.0   4612   856 tty4     Ss+  15:36   0:00 /sbin/getty -8 38400 tty4\nroot      1156  0.0  0.0   4612   844 tty5     Ss+  15:36   0:00 /sbin/getty -8 38400 tty5\nroot      1173  0.0  0.0   4724  1832 ?        Ss   15:36   0:00 /usr/sbin/bluetoothd\nroot      1201  0.0  0.0   4612   856 tty2     Ss+  15:36   0:00 /sbin/getty -8 38400 tty2\nroot      1202  0.0  0.0   4612   852 tty3     Ss+  15:36   0:00 /sbin/getty -8 38400 tty3\nroot      1205  0.0  0.0   4612   840 tty6     Ss+  15:36   0:00 /sbin/getty -8 38400 tty6\nroot      1234  0.0  0.0   7204  3184 ?        Ss   15:36   0:03 /usr/sbin/modem-manager\nroot      1239  0.0  0.0   2288   720 ?        Ss   15:36   0:00 acpid -c /etc/acpi/events -s /var/run/acpid.socket\nroot      1243  0.0  0.0  34020  3124 ?        Ssl  15:36   0:00 lightdm\nroot      1452  5.9  3.6 122592 296884 tty7    Ss+  15:36   8:08  \\_ /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none\nroot      2572  0.0  0.0  18200  3616 ?        Sl   15:36   0:00  \\_ lightdm --session-child 12 19\nreze      2886  0.0  0.1  49672  8440 ?        Ssl  15:37   0:00      \\_ gnome-session --session=gnome-classic\nreze      2965  0.0  0.0   4060   208 ?        Ss   15:37   0:00          \\_ /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session gnome-session --session=gnome-classic\nreze      3005  0.0  0.2 245988 17284 ?        Sl   15:37   0:05          \\_ /usr/lib/gnome-settings-daemon/gnome-settings-daemon\nreze      3034  0.0  0.0   3692   780 ?        S    15:37   0:05          |   \\_ syndaemon -i 2.0 -K -R -t\nreze      3047  0.1  0.3 201020 29104 ?        Sl   15:37   0:09          \\_ gnome-panel\nreze      3056  0.0  0.0  57992  7748 ?        Sl   15:37   0:00          \\_ /usr/lib/gnome-settings-daemon/gnome-fallback-mount-helper\nreze      3064  0.0  0.1 152360 14100 ?        Sl   15:37   0:04          \\_ /usr/lib/notification-daemon/notification-daemon\nreze      3065  0.1  0.3 234464 26660 ?        Sl   15:37   0:09          \\_ nautilus -n\nreze      3068  0.0  0.1 254220 14692 ?        Sl   15:37   0:01          \\_ nm-applet\nreze      3076  0.0  0.0  39344  7312 ?        Sl   15:37   0:00          \\_ /usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1\nreze      3098  0.0  0.1 149008 10360 ?        Sl   15:37   0:00          \\_ bluetooth-applet\nreze      3194  0.0  0.0  41024  7904 ?        Sl   15:37   0:00          \\_ /usr/lib/gnome-disk-utility/gdu-notification-daemon\nreze      3218  0.0  0.1  74232  9272 ?        Sl   15:37   0:00          \\_ telepathy-indicator\nreze      3292  0.0  0.0  39768  7640 ?        Sl   15:37   0:00          \\_ gnome-screensaver\nreze      3293  0.0  0.0  54716  5472 ?        Sl   15:37   0:00          \\_ zeitgeist-datahub\nreze      3396  0.0  0.1  51284 10472 ?        Sl   15:38   0:00          \\_ /usr/lib/evolution/3.2/evolution-alarm-notify\nreze      3629  0.0  0.1  52616 11196 ?        Sl   15:38   0:00          \\_ update-notifier\nreze      3673  0.0  0.0  35720  3636 ?        Sl   15:39   0:00          \\_ /usr/lib/deja-dup/deja-dup/deja-dup-monitor\nroot      1247  0.0  0.0  11060  3584 ?        Ss   15:36   0:00 /usr/sbin/cupsd -F\ndaemon    1257  0.0  0.0   2452   352 ?        Ss   15:36   0:00 atd\nroot      1265  0.0  0.0   2600   872 ?        Ss   15:36   0:00 cron\nmysql     1275  0.0  0.4 319484 33812 ?        Ssl  15:36   0:02 /usr/sbin/mysqld\nroot      1284  0.0  0.0   3584   660 ?        Ss   15:36   0:02 /usr/sbin/irqbalance\navahi     1298  0.0  0.0   3584  1700 ?        S    15:36   0:00 avahi-daemon: running [prolix.local]\navahi     1299  0.0  0.0   3436   432 ?        S    15:36   0:00  \\_ avahi-daemon: chroot helper\nwhoopsie  1370  0.0  0.0  25920  4460 ?        Ssl  15:36   0:00 whoopsie\nroot      1464  0.0  0.0  31104  5080 ?        Ssl  15:36   0:00 NetworkManager\nroot      5016  0.0  0.0   7364  2632 ?        S    17:48   0:00  \\_ /usr/sbin/pppd nodetach lock nodefaultroute user movistarcr ttyUSB0 noipdefault noauth refuse-eap refuse-chap refuse-mschap refuse-mschap-v2 usepeerdns lcp-echo-failure 5 lcp-echo-interval 30 ipparam /org/freedesktop/NetworkManager/PPP/1 plugin /usr/lib/pppd/2.4.5/nm-pppd-plugin.so\nnobody    5038  0.0  0.0   5384  1164 ?        S    17:48   0:00  \\_ /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=0 --proxy-dnssec\nroot      1482  0.0  0.0  25352  3764 ?        Sl   15:36   0:00 /usr/lib/policykit-1/polkitd --no-debug\nroot      1571  0.0  0.0   2216   256 ?        S    15:36   0:00 /bin/sh /usr/lib/ipsec/_plutorun --debug  --uniqueids yes --force_busy no --nocrsend no --strictcrlpolicy no --nat_traversal yes --keep_alive  --protostack netkey --force_keepalive no --disable_port_floating no --virtual_private  --listen  --crlcheckinterval 0 --ocspuri  --nhelpers  --dump  --opts  --stderrlog  --wait no --pre  --post  --log daemon.error --plutorestartoncrash true --pid /var/run/pluto/pluto.pid\nroot      1573  0.0  0.0   2216   272 ?        S    15:36   0:00  \\_ /bin/sh /usr/lib/ipsec/_plutorun --debug  --uniqueids yes --force_busy no --nocrsend no --strictcrlpolicy no --nat_traversal yes --keep_alive  --protostack netkey --force_keepalive no --disable_port_floating no --virtual_private  --listen  --crlcheckinterval 0 --ocspuri  --nhelpers  --dump  --opts  --stderrlog  --wait no --pre  --post  --log daemon.error --plutorestartoncrash true --pid /var/run/pluto/pluto.pid\nroot      1577  0.0  0.0  13304  3160 ?        S    15:36   0:00  |   \\_ /usr/lib/ipsec/pluto --nofork --secretsfile /etc/ipsec.secrets --ipsecdir /etc/ipsec.d --use-netkey --uniqueids --nat_traversal\nroot      1587  0.0  0.0  13200   836 ?        SN   15:36   0:00  |       \\_ pluto helper  #  0                                                                                                             \nroot      1588  0.0  0.0  13200   836 ?        SN   15:36   0:00  |       \\_ pluto helper  #  1                                                                                                             \nroot      1589  0.0  0.0  13200   836 ?        SN   15:36   0:00  |       \\_ pluto helper  #  2                                                                                                             \nroot      1590  0.0  0.0  13200   836 ?        SN   15:36   0:00  |       \\_ pluto helper  #  3                                                                                                             \nroot      1591  0.0  0.0  13200   836 ?        SN   15:36   0:00  |       \\_ pluto helper  #  4                                                                                                             \nroot      1592  0.0  0.0  13200   836 ?        SN   15:36   0:00  |       \\_ pluto helper  #  5                                                                                                             \nroot      1593  0.0  0.0  13200   836 ?        SN   15:36   0:00  |       \\_ pluto helper  #  6                                                                                                             \nroot      1743  0.0  0.0   2088   304 ?        S    15:36   0:00  |       \\_ _pluto_adns\nroot      1574  0.0  0.0   2216   544 ?        S    15:36   0:00  \\_ /bin/sh /usr/lib/ipsec/_plutoload --wait no --post \nroot      1572  0.0  0.0   2132   548 ?        S    15:36   0:00 logger -s -p daemon.error -t ipsec__plutorun\nroot      1897  0.0  0.0  39560  1840 ?        Ss   15:36   0:00 /usr/lib/l2tp-ipsec-vpn-daemon/L2tpIPsecVpnControlDaemon\nroot      1906  0.0  0.0      0     0 ?        Z    15:36   0:00  \\_ [echo] <defunct>\nroot      1911  0.0  0.0   4136  1188 ?        Ss   15:36   0:00 ha_logd: read process                        \nroot      1925  0.0  0.0   4136   684 ?        S    15:36   0:00  \\_ ha_logd: write process                       \nroot      2009  0.0  0.0   2232   304 ?        Ss   15:36   0:00 /usr/sbin/xl2tpd\nroot      2057  0.0  0.0  15816  3372 ?        Sl   15:36   0:00 /usr/lib/accountsservice/accounts-daemon\nroot      2064  0.0  0.0   6196  2720 ?        Ss   15:36   0:00 /usr/sbin/apache2 -k start\nwww-data  2067  0.0  0.0   5976  1912 ?        S    15:36   0:00  \\_ /usr/sbin/apache2 -k start\nwww-data  2069  0.0  0.0 229664  2252 ?        Sl   15:36   0:00  \\_ /usr/sbin/apache2 -k start\nwww-data  2070  0.0  0.0 229664  2252 ?        Sl   15:36   0:00  \\_ /usr/sbin/apache2 -k start\nroot      2153  0.0  0.0  42376  3356 ?        Sl   15:36   0:00 /usr/sbin/console-kit-daemon --no-daemon\nroot      2378  0.0  0.0   4612   848 tty1     Ss+  15:36   0:00 /sbin/getty -8 38400 tty1\nroot      2413  0.0  0.0  28780  4232 ?        Sl   15:36   0:01 /usr/lib/upower/upowerd\ncolord    2558  0.0  0.1  53632 10496 ?        Sl   15:36   0:00 /usr/lib/i386-linux-gnu/colord/colord\nrtkit     2599  0.0  0.0  21312  1244 ?        SNl  15:36   0:00 /usr/lib/rtkit/rtkit-daemon\nreze      2875  0.0  0.1 127084  9088 ?        Sl   15:37   0:00 /usr/bin/gnome-keyring-daemon --daemonize --login\nreze      2968  0.0  0.0   3920   484 ?        S    15:37   0:00 /usr/bin/dbus-launch --exit-with-session gnome-session --session=gnome-classic\nreze      2969  0.0  0.0   6872  2900 ?        Ss   15:37   0:06 //bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session\nreze      3010  0.0  0.0   8388  2220 ?        S    15:37   0:00 /usr/lib/gvfs/gvfsd\nreze      3012  0.0  0.0  34740  2580 ?        Sl   15:37   0:00 /usr/lib/gvfs//gvfs-fuse-daemon -f /home/reze/.gvfs\nreze      3021  0.0  0.0  49616  3912 ?        Sl   15:37   0:00 /usr/lib/gnome-settings-daemon/gsd-printer\nreze      3030  0.0  0.0  39188  7204 ?        Sl   15:37   0:00 /usr/lib/gnome-settings-daemon/gsd-locate-pointer\nreze      3039  0.0  0.0 109036  5928 ?        S<l  15:37   0:03 /usr/bin/pulseaudio --start --log-target=syslog\nreze      3045  0.0  0.0  14084  2492 ?        S    15:37   0:00  \\_ /usr/lib/pulseaudio/pulse/gconf-helper\nreze      3041  0.0  0.0   9628  3244 ?        S    15:37   0:00 /usr/lib/i386-linux-gnu/gconf/gconfd-2\nreze      3051  0.0  0.0  33628  2532 ?        Sl   15:37   0:00 /usr/lib/dconf/dconf-service\nreze      3063  0.0  0.0  28436  3832 ?        S    15:37   0:00 /usr/lib/gvfs/gvfs-gdu-volume-monitor\nroot      3067  0.0  0.0  25324  3664 ?        Sl   15:37   0:00 /usr/lib/udisks/udisks-daemon\nroot      3069  0.0  0.0   6536   724 ?        S    15:37   0:00  \\_ udisks-daemon: not polling any devices\nreze      3078  0.0  0.0   9192  2152 ?        S    15:37   0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor\nreze      3080  0.0  0.0  20468  2140 ?        Sl   15:37   0:00 /usr/lib/gvfs/gvfs-afc-volume-monitor\nreze      3104  0.0  0.0   2216   532 ?        Ss   15:37   0:00 /bin/sh -c /usr/bin/compiz-decorator\nreze      3105  0.5  0.1 222528 15276 ?        Sl   15:37   0:47  \\_ /usr/bin/metacity --replace\nreze      3108  0.1  0.1 146964  9532 ?        Sl   15:37   0:11 /usr/lib/gnome-applets/multiload-applet-2\nreze      3117  0.0  0.1 152740 14252 ?        Sl   15:37   0:02 /usr/lib/indicator-applet/indicator-applet-complete\nreze      3126  0.0  0.0  45136  4424 ?        Sl   15:37   0:00 /usr/lib/indicator-application/indicator-application-service\nreze      3128  0.0  0.0  64328  6248 ?        Sl   15:37   0:00 /usr/lib/indicator-datereze/indicator-datereze-service\nreze      3132  0.0  0.1  52132  8648 ?        Sl   15:37   0:00 /usr/lib/indicator-printers/indicator-printers-service\nreze      3134  0.0  0.0  69288  5184 ?        Sl   15:37   0:00 /usr/lib/indicator-session/indicator-session-service\nreze      3136  0.0  0.0 127484  5960 ?        Sl   15:37   0:00 /usr/lib/indicator-sound/indicator-sound-service\nreze      3162  0.0  0.0   7960  2356 ?        S    15:37   0:00 /usr/lib/geoclue/geoclue-master\nreze      3174  0.0  0.0  70476  5796 ?        Sl   15:37   0:02 /usr/lib/indicator-messages/indicator-messages-service\nreze      3183  0.0  0.0  21284  4600 ?        S    15:37   0:00 /usr/lib/ubuntu-geoip/ubuntu-geoip-provider\nreze      3186  0.0  0.0   8820  3084 ?        S    15:37   0:00 /usr/lib/gvfs/gvfsd-trash --spawner :1.7 /org/gtk/gvfs/exec_spaw/0\nreze      3188  0.0  0.4 216232 39836 ?        Ssl  15:37   0:05 /home/reze/.dropbox-dist/dropbox\nreze      3192  0.0  0.0   8420  2384 ?        S    15:37   0:00 /usr/lib/gvfs/gvfsd-burn --spawner :1.7 /org/gtk/gvfs/exec_spaw/1\nreze      3243  0.0  0.0  41700  5608 ?        Sl   15:37   0:00 /usr/lib/telepathy/mission-control-5\nreze      3248  0.0  0.1  91208  9208 ?        Sl   15:37   0:00 /usr/lib/gnome-online-accounts/goa-daemon\nreze      3301  0.0  0.0  44844  4316 ?        Sl   15:37   0:00 /usr/bin/zeitgeist-daemon\nreze      3307  0.0  0.0  51900  8120 ?        Sl   15:37   0:00 /usr/lib/zeitgeist/zeitgeist-fts\nreze      3315  0.0  0.0   4208   280 ?        S    15:37   0:00  \\_ /bin/cat\nreze      3380  0.1  0.2 171068 23232 ?        Sl   15:38   0:12 gnome-terminal --title=[. machinesNamezzz ! .] --geometry=220x55+20+50      \nreze      3399  0.0  0.0   2384   748 ?        S    15:38   0:00  \\_ gnome-pty-helper\nreze      3402  0.0  0.0   5624  2052 pts/0    Ss+  15:38   0:00  \\_ bash\nreze      3404  0.0  0.0   5620  1860 pts/1    Ss+  15:38   0:00  \\_ bash\nreze      3405  0.0  0.0   5624  1856 pts/2    Ss   15:38   0:00  \\_ bash\nroot      3576  0.0  0.0   7564  2032 pts/2    S    15:38   0:00  |   \\_ sudo bash\nroot      3577  0.0  0.0   5616  2056 pts/2    S+   15:38   0:00  |       \\_ bash\nreze      3449  0.0  0.0   5620  1860 pts/3    Ss+  15:38   0:00  \\_ bash\nreze      3482  0.0  0.0   5624  2036 pts/4    Ss   15:38   0:00  \\_ bash\nreze      5286  0.0  0.0   5224  1336 pts/4    R+   17:53   0:00  |   \\_ ps fauxww\nreze      3498  0.0  0.0   5624  2048 pts/6    Ss+  15:38   0:00  \\_ bash\nreze      4824  0.0  0.0   5620  1856 pts/13   Ss+  17:31   0:00  \\_ bash\nreze      4845  0.0  0.0   5620  1856 pts/16   Ss+  17:31   0:00  \\_ bash\nreze      4850  0.0  0.0   5624  2028 pts/17   Ss+  17:31   0:00  \\_ bash\nreze      3401  0.0  0.1  88580  8516 ?        Sl   15:38   0:00 /usr/lib/evolution/e-calendar-factory\nreze      3563  0.0  0.3  83804 25344 ?        Sl   15:38   0:00 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon\nreze      3680  0.8  0.4 185172 32860 ?        Sl   15:39   1:11 pidgin\nreze      5261  0.0  0.1 185216 15936 ?        S    17:52   0:00  \\_ pidgin\nreze      5264  0.0  0.1 185216 15936 ?        S    17:52   0:00  \\_ pidgin\nreze      5278  0.0  0.1 185216 15936 ?        S    17:53   0:00  \\_ pidgin\nreze      5285  0.0  0.1 185172 14680 ?        S    17:53   0:00  \\_ pidgin\nreze      3777  2.1  1.3 472128 106808 ?       Sl   15:41   2:46 /usr/lib/chromium-browser/chromium-browser\nreze      3781  0.0  0.0  96824  4640 ?        S    15:41   0:02  \\_ /usr/lib/chromium-browser/chromium-browser\nreze      4037  0.0  0.1 123740 14124 ?        Sl   15:42   0:00  \\_ /usr/lib/chromium-browser/chromium-browser --type=plugin --plugin-path=/usr/lib/gnash/libgnashplugin.so --lang=en-US --channel=3777.14.477318158\nreze      4042  1.5  0.2  98348 20328 ?        Sl   15:42   2:00      \\_ /usr/bin/gtk-gnash -u https://github.com/flash/clippy.swf -U https://github.com/reze-freeze-goofe/distribution -x 62914595 -j 15 -k 15 -F 25:26 -P allowscriptaccess=always -P flashvars=id=global-clippy-instance -P height=100% -P name=global-clippy-object-tag -P scale=exactfit -P src=/flash/clippy.swf -P width=100% -\nreze      3783  0.0  0.0   2240   280 ?        S    15:41   0:00 /usr/lib/chromium-browser/chromium-browser-sandbox /usr/lib/chromium-browser/chromium-browser --type=zygote\nreze      3784  0.0  0.1 111544 10072 ?        S    15:41   0:00  \\_ /usr/lib/chromium-browser/chromium-browser --type=zygote\nreze      3806  0.1  0.4 176688 39332 ?        Sl   15:41   0:13  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --extension-process --channel=3777.0.1993926945\nreze      3813  0.0  0.2 145108 19568 ?        Sl   15:41   0:01  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --extension-process --channel=3777.1.1654708668\nreze      3818  0.0  0.2 147448 22840 ?        Sl   15:41   0:03  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --extension-process --channel=3777.2.896555333\nreze      3832  1.4  1.2 290840 105816 ?       Sl   15:41   1:52  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.3.157588095\nreze      3838  0.0  0.7 205676 62972 ?        Sl   15:41   0:05  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.4.573163336\nreze      3845  0.0  0.6 186076 49992 ?        Sl   15:41   0:03  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.5.1985847488\nreze      3852  0.2  0.5 187076 45872 ?        Sl   15:41   0:21  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.6.2061997881\nreze      3865  0.6  1.1 234276 94312 ?        Sl   15:41   0:52  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.7.252098525\nreze      3871  0.0  0.6 191200 49656 ?        Sl   15:41   0:03  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.8.770501126\nreze      3878  0.0  0.5 173888 42156 ?        Sl   15:41   0:03  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.9.1377842901\nreze      3886  0.0  0.3 157620 30052 ?        Sl   15:41   0:01  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.10.162440891\nreze      3892  0.0  0.3 157344 28496 ?        Sl   15:41   0:01  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.11.315877506\nreze      3899  0.0  0.3 159200 32280 ?        Sl   15:41   0:03  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/ --channel=3777.12.743987699\nreze      4905  0.7  0.6 191604 56096 ?        Sl   17:38   0:06  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=CacheListSize/CacheListSize_14/ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/WebStoreLinkExperiment/Disabled/ --channel=3777.26.1736589791\nreze      4924  0.6  0.7 191460 61348 ?        Sl   17:40   0:04  |   \\_ /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtest=CacheListSize/CacheListSize_14/ConnCountImpact/conn_count_6/ConnnectBackupJobs/ConnectBackupJobsEnabled/DnsImpact/default_enabled_prefetch/GlobalSdch/global_enable_sdch/IdleSktToImpact/idle_timeout_10/Instant/SuggestExperimentA/Prefetch/ContentPrefetchPrefetchOn/Prerender/ContentPrefetchPrerenderControl1/PrerenderFromOmnibox/OmniboxPrerenderEnabled/ProxyConnectionImpact/proxy_connections_32/SpdyCwnd/cwndMin16/SpdyImpact/npn_with_spdy/SyncPromoLayoutExperiment/5/WarmSocketImpact/last_accessed_socket/WebStoreLinkExperiment/Disabled/ --channel=3777.28.1114272032\nroot      3785  0.0  0.0      0     0 ?        Z    15:41   0:00  \\_ [chromium-browse] <defunct>\nreze      3985  0.0  0.0  35472  3116 ?        Sl   15:41   0:00 /usr/lib/libreoffice/program/oosplash --draw\nreze      4006  1.1  1.8 419856 148436 ?       Sl   15:41   1:27  \\_ /usr/lib/libreoffice/program/soffice.bin --draw --splash-pipe=6\nreze      4210  0.0  0.0  31472  3912 ?        Sl   16:16   0:00 /usr/lib/gvfs/gvfsd-http --spawner :1.7 /org/gtk/gvfs/exec_spaw/2\nreze      4531  0.0  0.0   8252  1976 ?        S    17:09   0:00 /usr/lib/gvfs/gvfsd-metadata\nreze      4606  0.1  0.2 166588 17800 ?        Sl   17:26   0:02 mate-terminal\nreze      4638  0.0  0.0      0     0 ?        Z    17:26   0:00  \\_ [mate-terminal] <defunct>\nreze      4639  0.0  0.0   5628  2048 pts/7    Ss+  17:26   0:00  \\_ [mate-terminal] bash\nreze      4643  0.0  0.0   5628  2044 pts/9    Ss+  17:26   0:00  \\_ [mate-terminal] bash\nreze      4654  0.0  0.0   5628  2048 pts/10   Ss+  17:26   0:00  \\_ [mate-terminal] bash\nreze      4665  0.0  0.0   5628  2044 pts/11   Ss+  17:26   0:00  \\_ [mate-terminal] bash\nreze      4676  0.0  0.0   5628  2044 pts/12   Ss+  17:26   0:00  \\_ [mate-terminal] bash\nreze      4699  0.0  0.0   5628  2044 pts/14   Ss+  17:26   0:00  \\_ [mate-terminal] bash\nreze      4708  0.0  0.0   5628  2048 pts/15   Ss+  17:26   0:00  \\_ [mate-terminal] bash\nreze      4632  0.0  0.0   9804  3500 ?        S    17:26   0:00 /usr/lib/MateConf/mateconfd-2\nreze      4637  0.1  0.1 143648 13260 ?        Sl   17:26   0:02 keyboardcast\n"
  },
  {
    "path": "tests/stdout.01.expected.txt",
    "content": "         /etc/mateconf\u001b[0m|\u001b[34m7780758 \u001b[35m(44.60%) \u001b[37m••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••\u001b[32m\n           /etc/brltty\u001b[0m|\u001b[34m3143272 \u001b[35m(18.02%) \u001b[37m••••••••••••••••••••••••••••••••\u001b[32m\n       /etc/apparmor.d\u001b[0m|\u001b[34m1597915 \u001b[35m(9.16%)  \u001b[37m•••••••••••••••••\u001b[32m\n/etc/bash_completion.d\u001b[0m|\u001b[34m597836 \u001b[35m(3.43%)   \u001b[37m•••••••\u001b[32m\n             /etc/mono\u001b[0m|\u001b[34m535352 \u001b[35m(3.07%)   \u001b[37m••••••\u001b[32m\n              /etc/ssl\u001b[0m|\u001b[34m465414 \u001b[35m(2.67%)   \u001b[37m•••••\u001b[32m\n          /etc/ardour2\u001b[0m|\u001b[34m362303 \u001b[35m(2.08%)   \u001b[37m••••\u001b[32m\n              /etc/X11\u001b[0m|\u001b[34m226309 \u001b[35m(1.30%)   \u001b[37m•••\u001b[32m\n      /etc/ImageMagick\u001b[0m|\u001b[34m202358 \u001b[35m(1.16%)   \u001b[37m•••\u001b[32m\n           /etc/init.d\u001b[0m|\u001b[34m143281 \u001b[35m(0.82%)   \u001b[37m••\u001b[32m\n              /etc/ssh\u001b[0m|\u001b[34m138042 \u001b[35m(0.79%)   \u001b[37m••\u001b[32m\n            /etc/fonts\u001b[0m|\u001b[34m119862 \u001b[35m(0.69%)   \u001b[37m••\u001b[32m\n            /etc/sound\u001b[0m|\u001b[34m112051 \u001b[35m(0.64%)   \u001b[37m••\u001b[32m\n              /etc/xdg\u001b[0m|\u001b[34m111971 \u001b[35m(0.64%)   \u001b[37m••\u001b[32m\n   /etc/java-7-openjdk\u001b[0m|\u001b[34m100414 \u001b[35m(0.58%)   \u001b[37m••\u001b[32m\n          /etc/apache2\u001b[0m|\u001b[34m95556 \u001b[35m(0.55%)    \u001b[37m•\u001b[32m\n      /etc/ld.so.cache\u001b[0m|\u001b[34m92934 \u001b[35m(0.53%)    \u001b[37m•\u001b[32m\n           /etc/sane.d\u001b[0m|\u001b[34m71429 \u001b[35m(0.41%)    \u001b[37m•\u001b[32m\n           /etc/dbus-1\u001b[0m|\u001b[34m70918 \u001b[35m(0.41%)    \u001b[37m•\u001b[32m\n             /etc/init\u001b[0m|\u001b[34m58780 \u001b[35m(0.34%)    \u001b[37m•\u001b[32m\n  /etc/bash_completion\u001b[0m|\u001b[34m58753 \u001b[35m(0.34%)    \u001b[37m•\u001b[32m\n    /etc/console-setup\u001b[0m|\u001b[34m57645 \u001b[35m(0.33%)    \u001b[37m•\u001b[32m\n/etc/speech-dispatcher\u001b[0m|\u001b[34m53500 \u001b[35m(0.31%)    \u001b[37m•\u001b[32m\n             /etc/gimp\u001b[0m|\u001b[34m41894 \u001b[35m(0.24%)    \u001b[37m•\u001b[32m\n              /etc/ppp\u001b[0m|\u001b[34m41552 \u001b[35m(0.24%)    \u001b[37m•\u001b[32m\n              /etc/apt\u001b[0m|\u001b[34m40810 \u001b[35m(0.23%)    \u001b[37m•\u001b[32m\n           /etc/grub.d\u001b[0m|\u001b[34m40058 \u001b[35m(0.23%)    \u001b[37m•\u001b[32m\n              /etc/xml\u001b[0m|\u001b[34m35802 \u001b[35m(0.21%)    \u001b[37m•\u001b[32m\n            /etc/gnome\u001b[0m|\u001b[34m33126 \u001b[35m(0.19%)    \u001b[37m•\u001b[32m\n          /etc/default\u001b[0m|\u001b[34m32218 \u001b[35m(0.18%)    \u001b[37m•\u001b[32m\n   /etc/wpa_supplicant\u001b[0m|\u001b[34m31611 \u001b[35m(0.18%)    \u001b[37m•\u001b[32m\n       /etc/cron.daily\u001b[0m|\u001b[34m30047 \u001b[35m(0.17%)    \u001b[37m•\u001b[32m\n             /etc/acpi\u001b[0m|\u001b[34m27944 \u001b[35m(0.16%)    \u001b[37m•\u001b[32m\n              /etc/vga\u001b[0m|\u001b[34m25081 \u001b[35m(0.14%)    \u001b[37m•\u001b[32m\n            /etc/pam.d\u001b[0m|\u001b[34m24963 \u001b[35m(0.14%)    \u001b[37m•\u001b[0m\n"
  },
  {
    "path": "tests/stdout.02.expected.txt",
    "content": "        info\u001b[0m|\u001b[34m229 \u001b[35m(20.74%) \u001b[37m-----------------------------------------------------------------------------------o\u001b[32m\n          PM\u001b[0m|\u001b[34m110 \u001b[35m(9.96%)  \u001b[37m---------------------------------------o\u001b[32m\n    pcieport\u001b[0m|\u001b[34m78 \u001b[35m(7.07%)   \u001b[37m----------------------------o\u001b[32m\n  Activation\u001b[0m|\u001b[34m62 \u001b[35m(5.62%)   \u001b[37m----------------------o\u001b[32m\n        INFO\u001b[0m|\u001b[34m44 \u001b[35m(3.99%)   \u001b[37m---------------o\u001b[32m\n         pci\u001b[0m|\u001b[34m21 \u001b[35m(1.90%)   \u001b[37m-------o\u001b[32m\nInitializing\u001b[0m|\u001b[34m21 \u001b[35m(1.90%)   \u001b[37m-------o\u001b[32m\n      system\u001b[0m|\u001b[34m16 \u001b[35m(1.45%)   \u001b[37m-----o\u001b[32m\n       fglrx\u001b[0m|\u001b[34m16 \u001b[35m(1.45%)   \u001b[37m-----o\u001b[32m\n        bcma\u001b[0m|\u001b[34m16 \u001b[35m(1.45%)   \u001b[37m-----o\u001b[32m\n     smpboot\u001b[0m|\u001b[34m14 \u001b[35m(1.27%)   \u001b[37m-----o\u001b[32m\n         NMI\u001b[0m|\u001b[34m14 \u001b[35m(1.27%)   \u001b[37m-----o\u001b[32m\n Calibrating\u001b[0m|\u001b[34m14 \u001b[35m(1.27%)   \u001b[37m-----o\u001b[32m\n         CPU\u001b[0m|\u001b[34m14 \u001b[35m(1.27%)   \u001b[37m-----o\u001b[32m\n     Booting\u001b[0m|\u001b[34m14 \u001b[35m(1.27%)   \u001b[37m-----o\u001b[32m\n          on\u001b[0m|\u001b[34m13 \u001b[35m(1.18%)   \u001b[37m----o\u001b[32m\n         usb\u001b[0m|\u001b[34m11 \u001b[35m(1.00%)   \u001b[37m---o\u001b[32m\n        time\u001b[0m|\u001b[34m10 \u001b[35m(0.91%)   \u001b[37m---o\u001b[32m\n          sd\u001b[0m|\u001b[34m10 \u001b[35m(0.91%)   \u001b[37m---o\u001b[32m\n  nameserver\u001b[0m|\u001b[34m10 \u001b[35m(0.91%)   \u001b[37m---o\u001b[0m\n"
  },
  {
    "path": "tests/stdout.03.expected.txt",
    "content": "2012-01-01\u001b[0m|\u001b[34m3 \u001b[35m(10.34%) \u001b[37m|||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-02\u001b[0m|\u001b[34m2 \u001b[35m(6.90%)  \u001b[37m|||||||||||||||||||||||||||||||||||\u001b[0m\n2012-01-03\u001b[0m|\u001b[34m3 \u001b[35m(10.34%) \u001b[37m|||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-04\u001b[0m|\u001b[34m3 \u001b[35m(10.34%) \u001b[37m|||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-05\u001b[0m|\u001b[34m3 \u001b[35m(10.34%) \u001b[37m|||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-06\u001b[0m|\u001b[34m3 \u001b[35m(10.34%) \u001b[37m|||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-07\u001b[0m|\u001b[34m4 \u001b[35m(13.79%) \u001b[37m||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-08\u001b[0m|\u001b[34m3 \u001b[35m(10.34%) \u001b[37m|||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n2012-01-09\u001b[0m|\u001b[34m5 \u001b[35m(17.24%) \u001b[37m||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\u001b[32m\n"
  },
  {
    "path": "tests/stdout.04.expected.txt",
    "content": "      var\u001b[0m|\u001b[33m265 \u001b[35m(27.69%) \u001b[37m(((((((((((((((((((((((((((((((((((()\u001b[31m\n      log\u001b[0m|\u001b[33m265 \u001b[35m(27.69%) \u001b[37m(((((((((((((((((((((((((((((((((((()\u001b[31m\n  upstart\u001b[0m|\u001b[33m123 \u001b[35m(12.85%) \u001b[37m(((((((((((((((()\u001b[31m\n     cups\u001b[0m|\u001b[33m11 \u001b[35m(1.15%)   \u001b[37m()\u001b[31m\ninstaller\u001b[0m|\u001b[33m8 \u001b[35m(0.84%)    \u001b[37m()\u001b[31m\n  lightdm\u001b[0m|\u001b[33m7 \u001b[35m(0.73%)    \u001b[37m)\u001b[31m\n  apache2\u001b[0m|\u001b[33m7 \u001b[35m(0.73%)    \u001b[37m)\u001b[31m\n      apt\u001b[0m|\u001b[33m5 \u001b[35m(0.52%)    \u001b[37m)\u001b[0m\n"
  },
  {
    "path": "tests/stdout.05.expected.txt",
    "content": " 0\u001b[0m|\u001b[34m6 \u001b[35m(3.14%)   \u001b[37mppppc\u001b[32m\n 1\u001b[0m|\u001b[34m46 \u001b[35m(24.08%) \u001b[37mppppppppppppppppppppppppppppppppc\u001b[32m\n 2\u001b[0m|\u001b[34m27 \u001b[35m(14.14%) \u001b[37mppppppppppppppppppc\u001b[32m\n 3\u001b[0m|\u001b[34m24 \u001b[35m(12.57%) \u001b[37mppppppppppppppppc\u001b[32m\n 4\u001b[0m|\u001b[34m24 \u001b[35m(12.57%) \u001b[37mppppppppppppppppc\u001b[32m\n 5\u001b[0m|\u001b[34m21 \u001b[35m(10.99%) \u001b[37mppppppppppppppc\u001b[32m\n 6\u001b[0m|\u001b[34m21 \u001b[35m(10.99%) \u001b[37mppppppppppppppc\u001b[32m\n 7\u001b[0m|\u001b[34m19 \u001b[35m(9.95%)  \u001b[37mpppppppppppppc\u001b[32m\n 8\u001b[0m|\u001b[34m1 \u001b[35m(0.52%)   \u001b[37mc\u001b[32m\n 9\u001b[0m|\u001b[34m1 \u001b[35m(0.52%)   \u001b[37mc\u001b[32m\n10\u001b[0m|\u001b[34m1 \u001b[35m(0.52%)   \u001b[37mc\u001b[0m\n"
  },
  {
    "path": "tests/stdout.06.expected.txt",
    "content": "  7\u001b[0m|\u001b[34m51975 \u001b[36m(28.12%) \u001b[31m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[32m\n  9\u001b[0m|\u001b[34m46200 \u001b[36m(25.00%) \u001b[31m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[32m\n  1\u001b[0m|\u001b[34m17327 \u001b[36m(9.38%)  \u001b[31m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[32m\n  3\u001b[0m|\u001b[34m14437 \u001b[36m(7.81%)  \u001b[31m^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[32m\n 13\u001b[0m|\u001b[34m11550 \u001b[36m(6.25%)  \u001b[31m^^^^^^^^^^^^^^^^^^^^^^^^\u001b[32m\n 41\u001b[0m|\u001b[34m5775 \u001b[36m(3.12%)   \u001b[31m^^^^^^^^^^^^\u001b[32m\n  5\u001b[0m|\u001b[34m5774 \u001b[36m(3.12%)   \u001b[31m^^^^^^^^^^^^\u001b[32m\n 15\u001b[0m|\u001b[34m5774 \u001b[36m(3.12%)   \u001b[31m^^^^^^^^^^^^\u001b[32m\n 11\u001b[0m|\u001b[34m3249 \u001b[36m(1.76%)   \u001b[31m^^^^^^^\u001b[32m\n 19\u001b[0m|\u001b[34m2888 \u001b[36m(1.56%)   \u001b[31m^^^^^^\u001b[32m\n 97\u001b[0m|\u001b[34m2887 \u001b[36m(1.56%)   \u001b[31m^^^^^^\u001b[32m\n 43\u001b[0m|\u001b[34m2887 \u001b[36m(1.56%)   \u001b[31m^^^^^^\u001b[32m\n 99\u001b[0m|\u001b[34m1444 \u001b[36m(0.78%)   \u001b[31m^^^\u001b[32m\n 47\u001b[0m|\u001b[34m1444 \u001b[36m(0.78%)   \u001b[31m^^^\u001b[32m\n 39\u001b[0m|\u001b[34m1444 \u001b[36m(0.78%)   \u001b[31m^^^\u001b[32m\n 27\u001b[0m|\u001b[34m1444 \u001b[36m(0.78%)   \u001b[31m^^^\u001b[32m\n009\u001b[0m|\u001b[34m1444 \u001b[36m(0.78%)   \u001b[31m^^^\u001b[32m\n 95\u001b[0m|\u001b[34m722 \u001b[36m(0.39%)    \u001b[31m^^\u001b[32m\n 55\u001b[0m|\u001b[34m722 \u001b[36m(0.39%)    \u001b[31m^^\u001b[32m\n033\u001b[0m|\u001b[34m722 \u001b[36m(0.39%)    \u001b[31m^^\u001b[32m\n 03\u001b[0m|\u001b[34m722 \u001b[36m(0.39%)    \u001b[31m^^\u001b[32m\n011\u001b[0m|\u001b[34m720 \u001b[36m(0.39%)    \u001b[31m^^\u001b[32m\n035\u001b[0m|\u001b[34m362 \u001b[36m(0.20%)    \u001b[31m^\u001b[32m\n015\u001b[0m|\u001b[34m362 \u001b[36m(0.20%)    \u001b[31m^\u001b[32m\n081\u001b[0m|\u001b[34m361 \u001b[36m(0.20%)    \u001b[31m^\u001b[32m\n007\u001b[0m|\u001b[34m361 \u001b[36m(0.20%)    \u001b[31m^\u001b[32m\n177\u001b[0m|\u001b[34m184 \u001b[36m(0.10%)    \u001b[31m^\u001b[32m\n083\u001b[0m|\u001b[34m181 \u001b[36m(0.10%)    \u001b[31m^\u001b[32m\n023\u001b[0m|\u001b[34m181 \u001b[36m(0.10%)    \u001b[31m^\u001b[0m\n"
  },
  {
    "path": "tests/stdout.07.expected.txt",
    "content": "   S\u001b[0m|\u001b[34m113 \u001b[35m(41.39%) \u001b[37mΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ\u001b[32m\n  Sl\u001b[0m|\u001b[34m71 \u001b[35m(26.01%)  \u001b[37mΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ\u001b[32m\n  S<\u001b[0m|\u001b[34m25 \u001b[35m(9.16%)   \u001b[37mΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞΞ\u001b[32m\n Ss+\u001b[0m|\u001b[34m21 \u001b[35m(7.69%)   \u001b[37mΞΞΞΞΞΞΞΞΞΞΞΞΞΞ\u001b[32m\n  Ss\u001b[0m|\u001b[34m20 \u001b[35m(7.33%)   \u001b[37mΞΞΞΞΞΞΞΞΞΞΞΞΞ\u001b[32m\n  SN\u001b[0m|\u001b[34m9 \u001b[35m(3.30%)    \u001b[37mΞΞΞΞΞΞ\u001b[32m\n Ssl\u001b[0m|\u001b[34m6 \u001b[35m(2.20%)    \u001b[37mΞΞΞΞ\u001b[32m\n   Z\u001b[0m|\u001b[34m3 \u001b[35m(1.10%)    \u001b[37mΞΞ\u001b[32m\nSTAT\u001b[0m|\u001b[34m1 \u001b[35m(0.37%)    \u001b[37mΞ\u001b[32m\n SNl\u001b[0m|\u001b[34m1 \u001b[35m(0.37%)    \u001b[37mΞ\u001b[0m\n"
  }
]