Разобрать файл с несколькими данными из другого файла

Ваш вопрос все еще немного неясен для меня, и у меня недостаточно вопросов, чтобы спросить в комментариях о разъяснениях.

Хотя,

gnome-sessionдолжен запустить gnome. Это то, что я использовал в прошлом. Однако это было для Gnome2 дней. С Gnome3 я отказался от корабля после недолгого использования, так что, вероятно, все по-другому.

В качестве альтернативы, если у вас есть только один configure DE, вам может сойти с рукstartx

1
28.11.2020, 23:45
2 ответа

Ключами ассоциативного массива 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
4
18.03.2021, 22:46

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

0
18.03.2021, 22:46

Теги

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