Попробуйте это,
while read i; do
LineNO=$(echo $i |awk '{print $3}');
echo "$i" | awk -F 'FIELD' -v a=$LineNO '{for(j=2;j<=NF;j++) print a$j}'| awk -F '[" *]' '{print $1","$2","$3}';
done < input
для файла.gz
gunzip < input.gz | while read i; do
LineNO=$(echo $i |awk '{print $3}');
echo "$i" | awk -F 'FIELD' -v a=$LineNO '{for(j=2;j<=NF;j++) print a$j}'| awk -F '[" *]' '{print $1","$2","$3}';
done
gunzip
, чтобы прочитать файл. while
читать построчно. LineNo
для сохранения номера строки. FIELD
для разделения строки разделителем. for
для печати из второго столбца. a
для печати LineNo. awk
для форматирования вывода с разделителем-запятой. Я отвечаю на свой вопрос, так как Fosforo вдохновил меня попробовать несколько способов, которые решили проблему.
С вашим текущим набором активных программ вы не можете управлять окнами в xvfb
с помощью xdotool
.
xdotool
по-прежнему разрешено получать информацию, например, вы можете узнать PID вашего окна xterm, выполнив команду:
DISPLAY=:10 xdotool search --name "xterm"
В вашем случае вы получили PID 2097165 для активного сеанса xterm.
Теперь вы обычно активируете окно с помощью команды:
DISPLAY=:10 xdotool windowactivate 2097165
Но когда вы запустите xvfb
, это вернет следующую ошибку:
Your windowmanager claims not to support _NET_ACTIVE_WINDOW, so the attempt to activate the window was aborted.
xdo_activate_window on window:2097165 reported an error
Таким образом, вы не можете активно манипулировать фокусом -Вы можете узнать, какой фокус по умолчанию у вашего DISPLAY
, выполнив эту команду:
DISPLAY=:10 xdpyinfo | grep focus
Это сообщит вам:
focus: PointerRoot
Фокус как PointerRoot
означает, что все, что вы вводите, вводится в окно, которое находится под вашим курсором.
Используя PID ранее, вы быстро найдете положение и размер окна xterm, выполнив команду:
DISPLAY=:10 xwininfo -id 2097165
Это тебе сказали:
Absolute upper-left X: 0
Absolute upper-left Y: 0
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 484
Height: 316
...
С помощью xdotool
вы можете аналогичным образом получить местоположение мыши:
DISPLAY=:10 xdotool getmouselocation
Это говорит о том, что местоположение вашей мыши:
x:512 y:384 screen:0 window:904
Другими словами; Ваша мышь не находится в -верхней части окна xterm, поэтому все, что вы вводите, используя тип xdotool, не помещается в окно xterm.
Существуют два очень простых решения;
Поскольку вы знаете и контролируете разрешение экрана при запуске xvfb
, второй вариант самый простой.
Вы просто добавляете -geometry
к аргументу запуска xterm, поэтому он становится:
sudo Xvfb :10 -ac -screen 0 1024x768x24
DISPLAY=:10 xterm -geometry 1024x768+0+0 &
Это сделает окно xterm полноразмерным и, таким образом, гарантирует, что мышь находится над окном, после чего команды xdotool
, такие как ключ и тип, будут работать.
Другими словами, добавление аргумента -geometry
в xterm является ответом на ваш вопрос.