Поиск символа в столбце

Я нашел ответ, а именно: выполнение:

sudo setxkbmap -layout ara

меняет мою клавиатуру на арабскую. Аналогично выполнение:

sudo setxkbmap -layout us

переключает ее обратно на английскую клавиатуру США. Другие раскладки можно найти в /usr/share/X11/xkb/symbols/.

3
23.02.2018, 22:47
6 ответов

Использование python3 , при условии, что столбец 7 существует во всех строках файла :

python3 -c "[print(l.split('|')[6][0]) for l in open('f').readlines()]"

> 2

Где 'f' - (полный) путь к файлу в одинарных кавычках.

Пояснение

open('f').readlines()

будет читать файл в каждой строке , а

s.split('|')[6][0] 

разделит строку разделителем | , а затем напечатает первый символ 7-го столбца ( где 0 - индекс первого столбца)

1
27.01.2020, 21:07

Команда Bash

IFS='|' read -r -a x <<< "$str"
echo "${x[7]:0:1}"

read использует содержимое $ str и разбивает его на ] pipe | char и помещает их в массив ( -a ) с именем x. Затем извлекаем один символ из начала 7-го поля.

Perl

perl -F'\|' -pale '($_) = $F[6] =~ /./g' <<< "$str"

-F => разделитель полей, -p => режим автопечати, -a => автоматическое разделение включено, -l => настройте разделитель записей ( RS ) на \ n и ORS на \ n .

7-е поле $ F [6] оценивается в контексте списка и как /./ g и возвращает отдельные символы, из которых первый выбирается и сохраняется в $ _ , который из-за автопечати перенесет его в стандартный вывод .

Expr

sep='|'
fld="[^$sep]*"
fld7=$(yes "$fld$sep" | sed 7q | tr -d '\n')
expr "$str" : "$fld7\(.\)"

Здесь мы создаем команду так, чтобы expr выполняла свою работу под капотом .

echo "$ fld"; # => [^ |] * echo "$ fld7"; # => [^ |] * [^ |] * .... 7 раз

2
27.01.2020, 21:07

Вы также можете использовать cut:

cut -d\| -f7 | cut -c1
9
27.01.2020, 21:07

Для изучения интересного поведения sed

sed 's/\(\([^|]\?\)[^|]*|\)\{7\}.*/\2/' input.file.txt

или для уменьшения экранирования

sed -r 's/(([^|]?)[^|]*\|){7}.*/\2/' input.file.txt

или для избежания regex

sed '/\n/{s/./\n/2;P;d;};s/|/\n/6;s/$/\n/;D' input.file.txt
1
27.01.2020, 21:07

Это выполнит свою работу:

awk -F "|" '{print(substr($7,1,1))}' input.file.txt
4
27.01.2020, 21:07

Это может помочь:

awk -F'[|.]' '{print $7}' filename.txt
0
27.01.2020, 21:07

Теги

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