Ваш вопрос все еще немного неясен для меня, и у меня недостаточно вопросов, чтобы спросить в комментариях о разъяснениях.
Хотя,
gnome-session
должен запустить gnome. Это то, что я использовал в прошлом. Однако это было для Gnome2 дней. С Gnome3 я отказался от корабля после недолгого использования, так что, вероятно, все по-другому.
В качестве альтернативы, если у вас есть только один configure DE, вам может сойти с рукstartx
Ключами ассоциативного массива pattern
являются конкатенации строк полей и разделителей полей, т.е.
$ awk 'NR==FNR{pattern[$0]; next} $3" "$5" "$7" "$8" "$9 in pattern' a.txt b.txt
10 E1 A Z1 B Z2 num : 580 Z3 582 Z4
12 E3 A Z1 B Z2 num : 581 Z3 580 Z4
15 E2 A Z1 B Z2 num : 582 Z3 581 Z4
или, возможно, более надежно (, поскольку он не предполагает, что разделители в a.txt
являются одиночными пробелами ), используя однозначную SUBSEP
переменную awk , как предложил Эд Мортон:
awk 'NR==FNR{pattern[$1,$2,$3,$5]; next} ($3,$5,$7,$9) in pattern' a.txt b.txt
Используя GNU sed
с включенным расширенным режимом регулярных выражений -E
и отключенным пространством шаблонов автопечати -n
, мы можем решить эту проблему, как показано.
Сначала мы определяем некоторые вспомогательные переменные оболочки, чтобы упростить написание кода sed.
$ f='(\S+)' g='\s+\S+\s+' fg="$f$g"
$ Ss='\S+\s+' fs="$f\s+"
$ re="$Ss $Ss $fg $fg $fs $fs $fs"
$ sed -En "
s/$f/&/6;tb
s/\s+/ /g;s/^ | \$//g
H;d
:b;G
\#^${re// /}.*\n\1 \2 \3 \4 \5(\n|$)#P
" a.txt b.txt
¶ Сначала мы идентифицируем строку, пришедшую из a.txt или b.txt, посредством присутствия 6-го фрагмента без пробелов. Если да, то это файл b.txt, и мы переходим к метке b в коде sed.
¶ В противном случае для файла a.txt мы обрезаем строку и сжимаем пробелы. Затем хранить в трюме.
¶ Для строк из файла b.txt мы подключаем переменную оболочки $re, которая была написана с учетом структуры строки b.txt. Также при его написании мы рассыпали в нем пробелы для ясности, которые нам теперь придется убрать. Мы печатаем P
начальную часть пространства шаблонов, если номера фрагментов 3, 5, 7, 8 и 9 файла b.txt должны быть найдены в файле.txt в любом месте одной строки.