сравнить 2 столбца из 2 разных файлов csv

Q1: «Это» пробуждение . Он пробуждает все задачи , ожидающие данных с диска . Если бы они не ждали этих данных, они бы не ждали в этой очереди.

Q2: Я не уверен, что понимаю вопрос. Каждая запись очереди пробуждения содержит указатель на задачу. try_to_wake_up получает указатель на задачу, которая должна пробудиться. Он вызывается один раз для каждой функции.

Q3: Есть много очередей ожидания. По одному на каждое событие, которое может произойти.Драйвер диска устанавливает очередь ожидания для каждого запроса к диску. Например, когда драйверу файловой системы требуется содержимое определенного блока диска, он запрашивает у драйвера диска этот блок, а затем запрос начинается с задачи, которая сделала запрос файловой системы. Другие записи могут быть добавлены в очередь ожидания, если поступает другой запрос на тот же блок, пока этот еще не обработан.

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

Q4: Процесс выполняет системный вызов, скажем, для чтения файла. Это запускает некоторый код в драйвере файловой системы, который определяет, что данные должны быть загружены с диска. Этот код делает запрос к драйверу диска и добавляет вызывающий процесс в очередь ожидания запроса. (На самом деле слоев больше, но вы поняли.) Когда чтение с диска завершается, запускается событие очереди ожидания, и, таким образом, процесс удаляется из очереди ожидания диска. Код, запускаемый событием очереди ожидания, представляет собой функцию, предоставляемую драйвером файловой системы, который копирует данные в память процесса и вызывает возврат системного вызова read .

4
21.11.2016, 15:20
2 ответа

На основе вашего простого примера, приведенного выше, это должно сработать. Это не удастся, если возможно, что какие-либо данные из первого столбца могут оказаться в любом другом столбце или в данных есть пробелы.

Использование bash и GNU grep.

grep -v -Ff <(cut -d',' -f 1 file1.csv) file2.csv > file3.csv

Объяснение

  • -v инвертированное сопоставление
  • -Ff использовать файл для источника шаблонов
  • <(cut -d ',' -f 1 file1.csv) получить первый столбец данных и использовать его как наш «файл».
1
27.01.2020, 20:59

Вот решение, использующее не awk, а Miller :

$ mlr --nidx join -u -j 1 --np --ur -f file1.csv file2.csv
"unique",3

Описание:

  • - nidx , поскольку столбцы позиционно индексируются (т.е. отсутствуют строки заголовков)
  • - u опция соединения, чтобы не требовать сортировки входных данных
  • -j 1 для соединения в столбце 1 для левого и правого файлов
  • - np --ur , чтобы не выдавать парные строки, но делать генерировать непарные строки в правом файле
1
27.01.2020, 20:59

Теги

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