Мы наконец воспроизвели эту проблему, постоянно касаясь экрана двумя руками.
debian @ beaglebone: ~ $ xinput --list
\ u23a1 Идентификатор указателя виртуального ядра = 2 [главный указатель (3)]
\ u239c \ u21b3 Идентификатор указателя XTEST виртуального ядра = 4 [ подчиненный указатель (2)]
\ u239c \ u21b3 HID 1241: 1177 id = 8 [подчиненный указатель (2)]
\ u239c \ u21b3 ti-tsc id = 7 [подчиненный указатель (2) ]
\ u23a3 Идентификатор клавиатуры виртуального ядра = 3 [основная клавиатура (2)]
\ u21b3 Идентификатор клавиатуры виртуального ядра XTEST = 5 [подчиненная клавиатура (3)]
\ u21b3 tps65217_pwr_but id = 6 [подчиненная клавиатура (3)]
\ u21b3 gpio_keys.13 id = 10 [подчиненная клавиатура (3)]
примечание: HID 1241: 1177 - подключенная мышь
ti-tsc - touschcreen (я думаю)
Когда я запускаю команду "xinput reattach 7 2" в lxterminal из tightVNC, щелчок левой кнопкой мыши снова начинает работать! Но я все еще не знаю команду для сенсорного экрана нажмите восстановление. : (
Ваш ответ может делать то, что вы хотите, но его можно улучшить.
Вы хотите свести к минимуму количество (простых )команд и количество труб, в пределах разумного. Наличие большего их количества, чем вам нужно, может быть неэффективным. На файле в пять-десять строк этого не заметишь, но когда вы обрабатываете файл с миллионом строк, это может иметь значение.
Вам не нужно запускать две sed
команды (одну в другую ). Вы можете сделать
sed -e '(first s command)' -e '(second s command)'или
sed '(first s command) ; (second s command)'
s/\t/ /
также должна иметь префикс 1
. s/…/…/6g
не определено. Поскольку вы хотите, чтобы s/\t/ /
выполнялось только один раз (на 6-й вкладке ), вы должны сказать простоs/\t/ /6
(безg
). Таким образом, ваша команда может быть
sed '1s/\t/\t0\t/4; 1s/\t/ /6' file
Фигурные скобки позволяют группировать команды, которые вы хотите выполнять вместе. Так что вы могли бы также сказать
sed '1{s/\t/\t0\t/4; s/\t/ /6}' file
Вы можете сделать это в awk следующим образом:
awk -F '\t' -v OFS='\t' 'NR==1 { $6 = $5 " " $6; $5 = "0" } { print } ' file
Используйтеsed -e '1s/\t/\t0\t/4' -e 's/\t/ /6g' file
Первая команда sed заменит первое вхождение <tab>
на <tab>0<tab>
в 4-м столбце первой строки. Вторая команда sed заменит все <tab>
на <space>
в 6-м столбце.
Кажется, что у вас есть шесть столбцов, разделенных табуляцией -, но какая-то обработка оставила первое слово 6-го столбца в 5-м столбце, когда значение в 5-м столбце отсутствует. Вероятно, это связано с тем, что на предыдущем шаге обработки в качестве разделителей использовались пробелы или общие пробелы, а не табуляция.
Теперь вы хотите вставить ноль в 5-ю колонку и переместить там слово на законное место в 6-й колонке.
Я предполагаю, что файл выглядит следующим образом, где каждый ^I
является символом табуляции (это вывод cat -t
в файле):
GCF_000014165.1_ASM1416v1.dist_nbr_anntn^IWP_011558474.1^I1155234^I1156286^Ipolyketide^Isynthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn^IWP_011558475.1^I1156298^I1156807^I12^Icarboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn^IWP_011558476.1^I1156804^I1157820^I-3^Ioxidoreductase [Mycobacterium]
Неясно, есть ли пустой столбец 2. Если он есть, просто добавьте один к номерам столбцов, которые я использую ниже.
$ awk -F '\t' 'BEGIN { OFS=FS } $5 ~ /[[:alpha:]]/ { $6 = $5 " " $6; $5 = 0 } { print }' file
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 0 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
Здесь я использую awk
для обнаружения любой буквы алфавита в 5-м столбце. Если он есть, перед 5-м столбцом ставится разделительный пробел перед 6-м столбцом, а 5-й столбец устанавливается равным нулю. Затем выводятся все строки, измененные или нет.
Попытался выполнить команду ниже, все работает нормально
awk 'NR==1 {$8=$7;$7=$6;$6=$5;$5=0}1' filename| sed -r "s/\s+/ /g"| sed "s/ /\t/g
"
выход
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 0 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
Вы можете нарезать и нарезать массивы с помощью splice
, встроенного в ваш сценарий, как показано:
$ perl -F\\t -pale '
next unless $. == 1;
splice @F, 4, 2, 0, join $", @F[-2,-1];
$_ = join "\t", @F;
' input.file