perl -F',\s+' -lane '
@ARGV and $h{$F[1]}=$F[0],next;
/^name:\s+(\S+)/ && exists $h{$a=$1} .. /^$/ || eof and do{
/^$/ || eof and $_ .= (/^$/ ? $, : $\) . ("id: " . $h{$a} // "") . (eof ? $, : $\);
};
print;
' table.csv students.dat
Perl
параметры
-F
Разделитель полей установлен на , \ s +
-l
Разделитель выходной записи установлен на \ n
-a
Режим автоматического разделения => массив @F
содержит поля $ 1, $ 2, ..., $ NF
-n
Печатать только при запросе + неявное чтение строк, a.la., awk
Логика
@ARGV и
=> когда входным файлом является .csv, otw .dat Perl
, condition1 .. condition2
является оператором триггера, a. la., ,
из sed
. Но он более универсален в том смысле, что мы можем добавить больше условий к входам ..
. В частности, в нашем случае / ^ name: \ s + (\ S +) / && $ h {$ a = $ 1}
составляет составной cond1
, который, когда строка начинается с имя: за которым следует несколько пробелов, затем фиксируется имя учащегося, и $ h {$ a = $ 1} проверяет, найдено ли это имя учащегося с ИСТИННЫМ значением. (N.B .: so => если бы ID был равен нулю, это отключило бы!). Оператор триггер
остается истинным после того, как этот шаг был выполнен, и мы продолжаем его до тех пор, пока не увидим пустую строку или не достигнем EOF
. На этом конкретном шаге мы заполняем текущую строку $ _
данными id из хэша. -Чтобы настроить это и лучше использовать видео, вам нужно активировать «Xinerama». Посмотрите здесь-https://help.ubuntu.com/community/XineramaHowTo
Я нашел решение, а именно, среда рабочего стола Ubuntu по умолчанию не поддерживает 4 монитора. Однажды я установил XFCE, мои 4 монитора работали отлично!!!
Я нашел это объяснение в туториале этого парня.http://collaboradev.com/2016/09/30/arch-linux-hydra-build/