У меня есть файл данных с 2 столбцами
1.0000 9.9398383
1.4399 8.0000000
2.5688 7.9393838
1.0000 4.0000000
1.4399 9.0094949
2.5688 3.9932323
1.0000 8.9393993
1.4399 7.3838473
1.5688 2.8337738
Я хочу создать другие файлы с этими данными, разделенными пустой строкой, но я не знаю, как вырезать файл после или перед пустым линия, пожалуйста, помогите.
Хотя я, вероятно, сам использовал бы Awk для этой задачи, другой вариант - csplit
:
csplit file '/^$/' '{*}'
разделит file
на части, ограниченные шаблоном регулярного выражения /^$/
, повторяя столько максимально возможное количество раз {*}
По умолчанию выходные файлы будут иметь имена xx00
, xx01
и т. д., но вы можете изменить как префикс, так и формат суффикса, как описано в man csplit
, например [ 1115]
csplit -f 'new' -b '_%d' file '/^$/' '{*}'
для имен вида new_0
, new_1
и т. Д.
(Для кусков фиксированной длины вы можете рассмотреть использование простого split
, а не основанного на регулярных выражениях csplit
).
awk '/^$/{n++} ; {print $0 >> "fnew"n}' dfile
Возьмет данные из dfile и поместит строки в fnew
, fnew1
...
less dfile
1.0000 9.9398383
1.4399 8.0000000
2.5688 7.9393838
1.0000 4.0000000
1.4399 9.0094949
2.5688 3.9932323
1.0000 8.9393993
1.4399 7.3838473
1.5688 2.8337738
less fnew
1.0000 9.9398383
1.4399 8.0000000
2.5688 7.9393838
less fnew1
1.0000 4.0000000
1.4399 9.0094949
2.5688 3.9932323
Может быть, что-то подобное?
cat data_2_cut.txt | cut -d "" -f1 >> first_column_file.txt
cat data_2_cut.txt | cut -d "" -f2 >> second_column_file.txt
Или вот так: данные - это ваш файл с двумя столбцами; первый и второй ряд разделены пробелом.
Сохранить первую строку в файл 1st:
awk -F " " '{print $1}' data > 1st
Сохранить вторую строку в файл 2nd:
awk -F " " '{print $2}' data > 2nd
perl -00 -lanE 'open my $fh, ">", "${ARGV}_$."; say $fh $_; close $fh' file
где:
-00
пустые строки использования как разделитель записей-lanE
действительно наполняет (главным образом, цикличное выполнение по записям во входе)$ARGV
текущее имя файла$.
текущее рекордное число$_
текущая запись