нужна помощь в форматировании данных с помощью awk с помощью ARGV[1], ARGV[2]

Я попытаюсь ответить на изначальную проблему, связанную с тем, что 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 )перед сборкой.

-1
21.09.2021, 00:23
2 ответа

Обрабатывать файлы наоборот, т.е.сначала прочитать и обработать файл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-скрипта ). См. также ARGINDGNU 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
4
21.09.2021, 04:20
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
-1
21.09.2021, 19:30

Теги

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