Столбец Extracting от запятой разделил текст

По определению (по крайней мере, по общему определению), 64-разрядный процесс может только видеть 264 байта памяти. На практике большинство операционных систем ограничивает каждый процесс немного меньше, чем доступное адресное пространство, так, чтобы ядро могло управлять с 64 значениями, который может быть указателями на память ядра, память процесса или память устройства. 4EB или 8EB предел распространен.

Задолго до этого Вы, вероятно, поразите архитектурно-зависимый предел. В частности, карта распределения памяти процесса должна поместиться в MMU машины, и аппаратные средства имеют тенденцию иметь только столько же битов по мере необходимости. MMUs идут с четырьмя уровнями таблиц страниц, и Linux (среди других) может поддерживать все четыре: PGD (глобальный каталог страницы) список ПУДИНГОВ (страница верхние каталоги) перечисляющий PMDs (страница каталоги среднего уровня) перечисляющий PTEs (записи таблицы страниц). Так как каждый уровень абстракции является еще одним шагом для принятия большей части указателя, разыменовывает, системы. Размеру страницы свойственно быть 4 КБ (21 242 адресуемых байта, однако большая часть 64-разрядной архитектуры может быть настроена для больших таблиц страниц, таким образом, трудно дать любой вид общего ответа на вопрос того, как высоко можно пойти.

Обратите внимание, что предел адреса для каждого процесса независим от сколько физической памяти, там может быть в машине. Например, количество каналов, доступных на сокетах DIMM в ПК, является теоретическим пределом тому, сколько RAM Вы можете иметь в том, что ПК (хотя ширина шины памяти ЦП обычно является ограничивающим фактором). Это не имеет никакого влияния, сколько памяти или сколько может использовать адресное пространство процесс (память могла быть выгружена или совместно использована несколькими узлами многопроцессорной машины NUMA).

3
25.09.2012, 02:46
4 ответа
awk -F , -v OFS='\t' 'NR == 1 || $6 > 4 {print $1, $6, $7, $8}' input.txt
8
27.01.2020, 21:08
  • 1
    должен быть {print $2, $6, $7, $8} –  Evgeny Vereshchagin 18.07.2015, 01:44

Я соглашаюсь, что awk является лучшим решением. Можно сделать это только в ударе с несколькими другими инструментами:

cut -d , -f 2,6,7,8 filename | {
    read header
    tr , $'\t' <<< "$header"
    while IFS=, read -r id num4 num5 num6; do
        # bash can only do integer arithmetic
        if [[ $(bc <<< "$num4 >= 4.0") = 1 ]]; then
           printf "%s\t%s\t%s\t%s\n" "$id" "$num4" "$num5" "$num6"
        fi
    done
}
3
27.01.2020, 21:08

Действительно не может разбить awk сценарий выше, но здесь рубиновое решение,

#!/usr/bin/ruby1.9.1

puts "id\tnumber4\tnumber5\tnumber6"

ARGF.each_line do |line|
  arr = line.split(',')
  puts "#{arr[1]}\t#{arr[5]}\t#{arr[6]}\t#{arr[7]}" if arr[5].to_f > 4.0
end

Для использования сценария называют его с именем файла или передают файл по каналу в него.

2
27.01.2020, 21:08

Решение Perl:

perl -F, -le '$, = "\t"; print @F[1,5,6,7] if $F[5] > 4 || $. == 1' file

-F, задает шаблон для разделения. -F неявно устанавливает -a

-a включает режим автоматического разделения при использовании с -n . Неявная команда разделения массива @F выполняется в первую очередь внутри неявного цикла while, созданного с помощью -n . -a неявно устанавливает -n

-n заставляет Perl использовать цикл вокруг вашей программы, что заставляет его перебирать аргументы имени файла примерно как sed -n или awk

-l включает автоматическую обработку окончания строки. Он имеет два отдельных эффекта. Во-первых, он автоматически обрабатывает разделитель входных записей ( \ n ). Во-вторых, он назначает разделитель выходной записи на \ n .

-e используется для ввода одной строки программы

Итак, perl -F, -le '$, = "\ t"; напечатайте @F [1,5,6,7], если $ F [5]> 4 || $. == 1 ' сделайте что-то вроде этого:

use English;

$OUTPUT_RECORD_SEPARATOR = $INPUT_RECORD_SEPARATOR;

while (<>) { # iterate over each line of the each file
    chomp;
    @F = split(',');
    $OUTPUT_FIELD_SEPARATOR = "\t";
    print @F[1,5,6,7] if $F[5] > 4 || $INPUT_LINE_NUMBER == 1;
}
1
27.01.2020, 21:08

Теги

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