Разделение: как разделить на различные проценты?

Графически Вы видите, распознан ли монитор с Monitor, Я знаю, что можно найти это на Ubuntu, Fedora и других в этом (или подобное) местоположение.

Система/Предпочтения/Монитор

И Вы можете turn-on/off любой монитор, Вы хотите или используете обоих в то же время с дублирующимся изображением в обоих мониторах или независимых мониторах

14
28.03.2011, 12:16
4 ответа

Команды ниже будут работать на проценты выше 50% (если Вы захотите разделить только на два файла), быстрый и грязный подход.

1) разделите 70% на основе строк

split -l $[ $(wc -l filename|cut -d" " -f1) * 70 / 100 ] filename 

2) разделите 70% на основе байтов

split -b $[ $(wc -c filename|cut -d" " -f1) * 70 / 100 ] filename
13
27.01.2020, 19:51
  • 1
    На туалете MacOSX иногда возвращает количество строк с пространством перед ним, что-то, что повреждает этот сценарий. Сначала передача по каналу к xargs удалит те пробелы и заставит вещи работать снова: split -l $[ $(wc -l filename | xargs | cut -d" " -f1) * 70 / 100 ] filename –  Emil Stenström 22.01.2018, 11:19

можно использовать csplit для разделения на две части (в процентах), например, первая часть - первые 20% строк, вторая часть - остальные 80% строк:

csplit infile $(( $(wc -l < infile) * 2 / 10 + 1))

$(wc -l < infile) : общее количество строк
2 / 10 : процент
+1 : добавьте одну строку, потому что csplit расщепляет до строки N

, но не включая строку N

.
В основном, пока у вас есть номер строки через $(( $(wc -l < file) * 2 / 10)) вы можете использовать любой линейно-ориентированный инструмент:

sed 1,$(( $(wc -l < infile) * 2 / 10))'{
w 20-infile
d
}' infile > 80-infile

или, даже круче:

{ head -n$(( $(wc -l < infile) * 2 / 10)) > 20-infile; cat > 80-infile; } <infile

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

4
27.01.2020, 19:51

Это несколько вопросов, поэтому давайте начнем с начала:

  1. Не знаю, почему инструкции для Python 2.6 от 2012 года кажутся простейшими, но в целом следует:

    • установить с помощью диспетчера пакетов, например, на Debian/Ubuntu sudo apt-get install python-lzma (это бэкпорт стандартного модуля lzma, появившегося в Python3.3)
    • или установить из PyPI с помощью pip (который должен быть установлен только один раз):

       sudo apt-
      pip установка pylzma
      

    Оба эти метода позволяют удалить установку, что-то, начиная со смолы, не гарантирует. Использование pip обычно предоставляет более актуальный пакет, но не может обрабатывать зависимости системной библиотеки (поэтому может потребоваться установить пакет liblzma5 , если он еще не установлен.

  2. Обычно bytecompile не выполняется явно, самое позднее при первом использовании, или во время установки. Но python работает нормально с файлами .py , даже если он не может записать файл .pyc при первом использовании (он просто начинается медленнее).

  3. Интересно, почему импорт питона по подсказке питона не дает ошибки. В моей системе это так, так как нет файла python.py . Чтобы проверить, есть ли у вас pylzma, вы можете следовать инструкциям на устаревшей странице, которую вы смотрите по адресу:

     > > import pylzma
    > > > импорт py7zlib
    

С помощью pip я получил версию 0,4,6 привязок Игоря Павлова

-121--146028-

Можно использовать csplit для разделения на две части (с использованием любого процента), например, первая часть - первая 20% строк, вторая часть - оставшаяся 80% строк:

csplit infile $(( $(wc -l < infile) * 2 / 10 + 1))

$ (wc -l < infile) : общее количество строк
2/10 : процент
+ 1 : добавить одну строку, так как csplit разбивает до строки N

, но не включает ее.
В основном, если у вас есть номер строки через $ (($ (wc -l < файл) * 2/10)) , вы можете использовать любой ориентированный на линию инструмент:

sed 1,$(( $(wc -l < infile) * 2 / 10))'{
w 20-infile
d
}' infile > 80-infile

или, даже круче:

{ head -n$(( $(wc -l < infile) * 2 / 10)) > 20-infile; cat > 80-infile; } <infile

, хотя некоторые головные тупые и не соответствуют стандартам , так что это не будет работать на всех установках...

-121--30747-
{   BS=$(($(wc -c <file) * $P / 100))
    dd count=1 bs="$BS" >file1; cat
} <file >file2 2>/dev/null

... должны работать в этом простом случае, потому что вы разделяетесь только один раз - и поэтому, вероятно, разделить немного перебор. Пока файл доступен для поиска, dd будет выполнять только одно read () для < stdin , и поэтому cat останется для начала read () при любом выходе из него пункта dd .

Если файл большой, то count = 1 bs = $ big _ ol _ num может стать немного громоздким, и он может быть заблокирован с помощью некоторых дополнительных, но простых формул оболочки.

Не искомые входные данные - как из канала - могут исказить результаты dd ,хотя это также может быть обработано с/GNU dd "s iflag = fullblock .

2
27.01.2020, 19:51

Следующий код, использующий headи tail, работает с любым соотношением (от 40 до 60 в данном случае):

export FILE_NAME=train.vw
head -n $[ $(wc -l ${FILE_NAME}|cut -d" " -f1) * 40 / 100 ] ${FILE_NAME} > train_40.vw
tail -n +$[ ($(wc -l ${FILE_NAME}|cut -d" " -f1) * 40 / 100) + 1 ] ${FILE_NAME} > train_60.vw
0
27.01.2020, 19:51

Теги

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