Can't split a text file based on separator

2020-05-07 03:14发布

问题:

I'm running Ubuntu 18.04 LTS. I have a text file named "group_keys", which contains a number of public keys that I'd like to split based on the delimiter

-----BEGIN PUBLIC KEY-----

and then output each key individually and sequentially. For example, if there are three keys, then the output would be three files with names like "person_1_key", "person_2_key", and "person_3_key".

The file looks like this:

I'm having difficulty using split and csplit to do this. The commands I'm inputting aren't working. Here's what I've tried;

Using split:

split --separator="-----BEGIN PUBLIC KEY-----" group_keys

This doesn't output anything, but instead gives me the message

split: multi-character separator ‘-----BEGIN PUBLIC KEY-----’

Using csplit:

csplit group_keys "-----BEGIN PUBLIC KEY-----"

This gives me only two files, "xx00" and "xx01", but it doesn't split the lines. "xx00" is completely blank, and the "xx01" is just the original file.

回答1:

Try

csplit -z -f person_ -b '%d_key' group_keys '/-----BEGIN PUBLIC KEY-----/' '{*}'

which would output four files person_0_key, person_1_key, person_2_key, person_3_key where

  • -z suppresses the generation of empty files
  • -f person_ sets the output filename prefix
  • -b '%d_key' sets the output filename suffix
  • '{*}' sets the repeat count (repeat as many times as possible)


回答2:

This should work:

awk '/-----BEGIN PUBLIC KEY-----?/{n++}{print > "person_" n "_key" }' group_keys