Handy command line tool of the day: csplit
The succinct one-line description of this pretty nifty tool:
csplit (1) - split a file into sections determined by context lines
There is a tool for everything, and the something I had to do today involved splitting a text file of GDB backtraces into files so I could diff them and attempt to see why threads were getting backed up trying to flush an APC PHP cache. It was generated using an already lovely command involving sudo
, lsof
, grep
, awk
, gdb
, and a bash for
loop. Exciting story, I know.
Anyway, the file looked something like this, although each backtrace was ~20 frames deep so I’ve cut it down a tad:
[Thread debugging using libthread_db enabled]
0x00002ba56bf7b4c4 in __lll_lock_wait () from /lib64/libpthread.so.0
#0 0x00002ba56bf7b4c4 in __lll_lock_wait () from /lib64/libpthread.so.0
...
#19 0x00002ba56a4a67fb in ap_mpm_run ()
#20 0x00002ba56a480e48 in main ()
[Thread debugging using libthread_db enabled]
0x00002ba56bf7b4c4 in __lll_lock_wait () from /lib64/libpthread.so.0
#0 0x00002ba56bf7b4c4 in __lll_lock_wait () from /lib64/libpthread.so.0
...
#19 0x00002ba56a4a67fb in ap_mpm_run ()
#20 0x00002ba56a480e48 in main ()
[Thread debugging using libthread_db enabled]
0x00002ba56bf7b4c4 in __lll_lock_wait () from /lib64/libpthread.so.0
#0 0x00002ba56bf7b4c4 in __lll_lock_wait () from /lib64/libpthread.so.0
...
And then the magic of csplit:
csplit notes.txt '/Thread debugging/' '{*}'
Which left me files numbered xx00
through xx13
, each with one full backtrace so I could easily compare them to each other with both diff -u
and vimdiff
.
Tags
See Also
- Nginx memory usage with SSL - November 16, 2011
- Linux command of the day: slabtop - July 7, 2011
- Making things IPv6 capable - June 8, 2011
- OpenVPN and ATA over Ethernet (AoE) interaction - February 25, 2013
- MySQL and /tmp on tmpfs - April 30, 2012