Я попытаюсь ответить на изначальную проблему, связанную с тем, что polybar не компилируется. Скорее всего, проблема не в версии, установленной через apt
. Эта конкретная проблема возникает только в системах, где xcb-proto
— это версия 1.12, а libxcb-randr0-dev
— 1.11, но, поскольку все версии 1.13.1, все должно быть в порядке.
Проблема в ваших журналах:
ERROR: could not calc required_start_align of Struct "xcb.Setup
Появился раньше, здесь . Там проблема заключалась в том, что анаконда использовалась для python, что вызывало множество проблем.
В вики есть инструкции о том, как скомпилировать polybar при установленной анаконде (без удаления анаконды ). Самый простой способ, о котором сообщают люди, — это запустить conda deactivate
в терминале, где вы компилируете polybar перед компиляцией. Также убедитесь, что вы полностью повторно загрузили архив tar -(или сделали чистый клон git )перед сборкой.
Обрабатывать файлы наоборот, т.е.сначала прочитать и обработать файл2, затем файл1:
awk 'FNR==NR { f2[$3]=$0; next };
{ print $0, ($1 in f2)? f2[$1]: "VIEW_NOT_FOUND" }' file2 file1
Если file2
может быть пустым, вы не можете полагаться на FNR!=NR
для второго файла (file1
). Вместо этого вы можете сделать:
awk '! file2_processed { f2[$3]=$0; next };
{ print $0, ($1 in f2) ? f2[$1]: "VIEW_NOT_FOUND" }
' file2 file2_processed=1 file1
Что в целом является более безопасным трюком, чем полагаться на FNR==NR
, чтобы узнать, какой файл вы обрабатываете (, и дешевле, чем ваш FILENAME == ARGV[0]
, который в общем случае вы должны написать как FILENAME == ARGV[1] ""
, чтобы заставить строку сравнение, так как оба имеют "тип" числовую -строку, если имя файла является числом; и обратите внимание, что первый аргумент находится в ARGV[1]
, а не в ARGV[0]
, который содержит имя awk-скрипта ). См. также ARGIND
GNU awk
:
awk 'ARGIND==1 { f2[$3]=$0; next };
{ print $0, ($1 in f2) ? f2[$1]: "VIEW_NOT_FOUND" }
' file2 file1
С учетом того, как вы обрабатываете файлы (файл1 сначала по сравнению с файлом2 ), вы можете сделать что-то вроде ниже:
awk '! file1_processed { f1[$0]; next };
($3 in f1){ print $3, $0; delete f1[$3] }
END{ for(x in f1) print x, "VIEW_NOT_FOUND" }' file1 file1_processed=1 file2
Сначала печатаются совпадающие строки и удаляются совпадающие ключи из связанного массива f1
, затем печатаются несовпадающие позже в выводе, как показано ниже:
sh_server1 vh_server1 ih_server1 sh_server1 E1-2_D1-4_P04_pg1
sh_server2 vh_server2 ih_server2 sh_server2 E1-2_D1-4_P05_pg2
sh_server3 vh_server3 ih_server3 sh_server3 E1-2_D1-4_P05_pg2
sh_server4 vh_server4 ih_server4 sh_server4 E1-2_D1-4_P04_pg1
sg_metro-ir VIEW_NOT_FOUND
sg_metro-nonir VIEW_NOT_FOUND
sg_optimized VIEW_NOT_FOUND
for i in `cat file1`; do j=$(grep -i "$i" file2); if [[ $? != 0 ]]; then echo -e "$i Notfound"; else echo -e "$i $j"; fi; done
выход
sg_metro-ir Notfound
sg_metro-nonir Notfound
sg_optimized Notfound
sh_server1 vh_server1 ih_server1 sh_server1 E1-2_D1-4_P04_pg1
sh_server2 vh_server2 ih_server2 sh_server2 E1-2_D1-4_P05_pg2
sh_server3 vh_server3 ih_server3 sh_server3 E1-2_D1-4_P05_pg2
sh_server4 vh_server4 ih_server4 sh_server4 E1-2_D1-4_P04_pg1