разделять текстовый файл пополам на основе шаблона

У меня есть текстовый файл, который выглядит так:

train/a/abbey/00000001.jpg 0
...
train/a/abbey/00000999.jpg 0
train/a/abbey/00001000.jpg 0
train/a/airport_terminal/00000001.jpg 1
train/a/airport_terminal/00000002.jpg 1
...
train/c/corn_field/00000354.jpg 40
train/c/corn_field/00000355.jpg 40
train/c/corn_field/00000356.jpg 40
...
train/y/yard/00000998.jpg 99
train/y/yard/00000999.jpg 99
train/y/yard/00001000.jpg 99

Последнее число в каждой строке - это категория. У меня есть 100 категорий (от 0 до 99), каждая из которых содержит 1000 строк (так 100 * 1000 = 100 000 строк).

Я хотел бы разбить этот файл на две случайные половины, т. е. половина содержит 50 случайных категорий, а другая половина содержит остальные 50 категорий.

1
задан 18 March 2016 в 21:57

2 ответа

Вы можете выполнить следующие шаги, чтобы выполнить вашу работу:

Прежде всего, разделите этот файл на 100 файлов категорий с использованием:
sed -n '0,99p' file >> 1.txt

для первой категории.

Прежде всего, разделите этот файл на 100 файлов категорий с помощью:
sed -n '0,99p' file >> 1.txt

Прежде всего, разделите этот файл на 100 файлов категорий с помощью:

1
ответ дан 23 May 2018 в 12:45

Этот скрипт должен это сделать. В обоих половинных файлах строки разделов сортируются как во входном файле, но сами главы перетасовываются. Если тебе надо. Я могу расширить скрипт для сортировки глав в каждой половине или перетасовать строки всей главы в одном файле.

#!/bin/bash

# Build chapterlist 0 1 2 3 ....
chapterlist=""
for (( i=0 ; i<100; i=i+1 )) ; do
  chapterlist="$chapterlist $i"
done

# shuffle chapterlist
randomchapterlist="`shuf -e $chapterlist`"

# "full" is input file
# half1 and half2 are output files
rm -f half1 half2

i=0
for chapter in $randomchapterlist ; do
  if [ $i -lt 50 ] ; then
    egrep ".*\ $chapter\$" full >> half1
  else
    egrep ".*\ $chapter\$" full >> half2
  fi
  i=$(( i+1 ));
done
1
ответ дан 23 May 2018 в 12:45
  • 1
    Genius, эффективный скрипт! Исходный порядок в главах в порядке, спасибо! Однако могу ли я попросить другое расширение? Предположим, я хочу (снова) случайным образом выбрать из каждой главы N количество строк. Например, теперь у меня есть 1000 строк в каждой главе. Но что, если я хочу, 500 или 300? Вы знаете, как достичь этой цели? Еще раз спасибо! – apples-oranges 19 March 2016 в 00:58

Другие вопросы по тегам:

Похожие вопросы: