# cat text-to-split.txt 1 aaa 2 b1 3 bb2 4 bbb3 5 c 6 c1 7 cc2 8 aaa 9 b1 10 bb2 11 c 12 c1 13 cc2 14 aaa 15 b1 16 c 17 cc2 18 aaa 19 b1 20 aaa 21 c1 22 ccc
Problem
How to split and divide file based on its content?
Analisis and results description
Example 1 : Single split line in whole file
The file will be divided on each line matching a single patter.
# csplit -k text-to-split.txt '%aaa%' '/aaa/' '{*}' 74 62 41 22 35 root@perf1:~/split# for i in xx0*; do echo $i; cat -n $i; done xx00 1 1 aaa 2 2 b1 3 3 bb2 4 4 bbb3 5 5 c 6 6 c1 7 7 cc2 xx01 1 8 aaa 2 9 b1 3 10 bb2 4 11 c 5 12 c1 6 13 cc2 xx02 1 14 aaa 2 15 b1 3 16 c 4 17 cc2 xx03 1 18 aaa 2 19 b1 xx04 1 20 aaa 2 21 c1 3 22 ccc
Example 2 : multiple split line
The csplit takes a variable number of regular expressions.
It scans the file and once a line matches the regex it splits the file at this point.
It evaluates then the next regular expression and continue to scan remaining file data.
When a match is found the file is split at this point again.
The last regex is used to split the remaining file until we read EOF.
In this example we:
- Jump to line containing b1 (don't copy and save the data - %)
- Continue searching for aaa and split when found.
- Continue searching for c1 and split when found.
- Use the last regex (c1) if file still have data.
csplit -k text-to-split.txt '%b1%' '/aaa/' '/c1/' '{*}' 63 41 96 23 root@perf1:~/split# for i in xx0*; do echo $i; cat -n $i; done xx00 1 2 b1 2 3 bb2 3 4 bbb3 4 5 c 5 6 c1 6 7 cc2 xx01 1 8 aaa 2 9 b1 3 10 bb2 4 11 c xx02 1 12 c1 2 13 cc2 3 14 aaa 4 15 b1 5 16 c 6 17 cc2 7 18 aaa 8 19 b1 9 20 aaa xx03 1 21 c1 2 22 ccc
References
http://rtomaszewski.blogspot.co.uk/2013/05/openssl-cheat-sheet.html
No comments:
Post a Comment