Сопоставьте числовые значения буквенно-цифровой строки с помощью awk

Estoy tratando de hacer lo mismo

Pude agregar un diseño personalizado a /usr/share/X11/xkb/symbolsseguido de chattr -i dvgpara evitar sobreescrituras. Luego modifiqué~/home/gordon/.config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml:

<?xml version="1.0" encoding="UTF-8"?>

<channel name="keyboard-layout" version="1.0">
  <property name="Default" type="empty">
    <property name="XkbDisable" type="bool" value="false"/>
    <property name="XkbOptions" type="empty">
      <property name="Group" type="string" value=""/>
      <property name="Compose" type="string" value=""/>
    </property>
    <property name="XkbLayout" type="string" value="dvg"/>
    <!-- <property name="XkbVariant" type="string" value="dvp"/> -->
    <property name="XkbModel" type="string" value="asus_laptop"/>
  </property>
</channel>

Todavía no sé cómo se vuelve a llenar la lista de diseños de teclado -en el administrador de configuración. No parece verse afectado por los cambios en/usr/share/X11/xkb/symbols

-4
09.10.2017, 16:17
3 ответа
awk 'substr($1,2)==substr($3,2) { print $0 > "file1" } substr($1,2) != substr($3,2) { print $0 > "file2" }' masterfile

С мастер-файлом, содержащим исходные данные, и с использованием функции substr awk, мы игнорируем первую букву первого и третьего полей, разделенных пробелами, оставляя нам числа для сравнения. Затем мы выполняем условные проверки этих номеров, помещая их в определенные файлы (file1 и file2 )соответственно.

1
28.01.2020, 05:20

Использование awkсоздаст два файла; Те строки, в которых числовые части столбцов 1 st и 3 rd были одинаковыми, будут помещены в отдельный файл, а те строки, в которых эти столбцы различались, — в другой файл.

awk -F"[A B]" '{
    print >(($2==$5)?"matches.txt":"non_matches.txt")
}' infile.txt

Это установит разделитель полей awk в наборы символов A, Bили пробела, затем сравните, если числовые части были одинаковыми, тогда текущая строка будет записана в файл «matches.txt», иначе она будет записана в файл "не _match.txt".

1
28.01.2020, 05:20
perl -alMFatal=open -pe '
   BEGIN{ unlink, open *{+uc}, ">>$_" for qw/file1.log file2.log/; }
   select $F[0] =~ s/^\D*//r eq $F[2] =~ s/^\D*//r ? *{"FILE1.LOG"} : *{"FILE2.LOG"};
' sample.txt

Пояснение

  • Perlопции :
    • -aразделит строку на поля на основе пробелов, и эти поля доступны через$F[0] $F[1]...
    • -lустановит RSна новую строку и ORSна новую строку.
    • -Mзагрузит модуль Fatal.pmи включит функцию openиз своего пространства имен. Это означает, что любые ошибки при открытии файла в основном коде должны умереть.
    • -pбудет читать строку файла sample.txt -за строкой -, а автоматическая -печать строк будет включена после применения к ней всех преобразований.
  • Блок BEGINдолжен удалить все существующие файлы file1.log и file2.log и открыть дескрипторы файлов в режиме appendдля файлов.
  • Команда
  • selectвыбирает дескриптор файла для печати текущей строки.
    • $F[0] =~ s/^\D*//rудалит все начальные нецифры в первом поле (это предполагает, что все цифры помещены в конец поля ).
    • Мы выполняем аналогичную операцию с 3-м полем ($F[2])и затем сравниваем эти результаты в строковом формате (и НЕ в числовом формате, поскольку 001 = 1 в числовом формате ). Когда строки совпадают, мы выбираем дескриптор файла *FILE1.LOG, что означает, что текущая строка печатается здесь из-за опции -p. OTW, дескриптор файла *FILE2.LOG делается дескриптором по умолчанию, а опция -pзаставляет Perlпечатать здесь текущую строку.

Мы можем сделать то же самое, используя sedинструмент, как показано:(Предполагая, что GNU sed)

sed -Ee '
   h;s/\S+/\n&\n/3
   /^[^0-9[:blank:]]*([0-9]+).*\n(.*[^0-9])?\1\n/{
      g
      s/^//w file1.log
      d
   }
   g
' < sample.txt > file2.log

  • На первом шаге мы заключаем третье поле с помощью маркеров.
  • Затем мы выполняем сравнение цифр в конце первого поля, чтобы они совпадали с цифрами в конце третьего поля.
  • При совпадении мы вспоминаем место хранения, в котором мы сохранили текущую строку без маркеров, и добавляем ее в файл file1.log.
  • При отсутствии совпадений мы возвращаем резервное пространство и отпускаем его на стандартный вывод, где он сохраняется в файле file2.log оболочкой.
0
28.01.2020, 05:20

Теги

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