Не удалось выполнить условия awk во входном файле

Нет, вам не нужно входить в систему, чтобы запустить процесс, работающий от имени данного пользователя. Вход в систему — это пространственная конструкция пользователя -; ядро не заботится об этом. Есть несколько примеров этого; например, задания cron могут выполняться от имени любого пользователя, даже если этот пользователь не входит в систему.

Для ответов на ваши конкретные вопросы:

  • нет, пользователю root не нужно входить в систему, чтобы initзапустить процесс, к счастью, (представьте, что в противном случае вы управляете парком из тысяч серверов и миллионов виртуальных машин );
  • подключение по SSH считается входом в систему.
0
26.10.2020, 03:09
1 ответ

Как уже прокомментировал @steeldriver, поля в ваших данных, кажется, не разделены =, поэтому установка разделителя полейFS()на это значение с использованием этого назначения -F=приведет к случайному выводу.

Кроме того, я не вижу, что поля 20и 31— это то, что вам нужно, даже если вы используете разделитель полей по умолчанию (пробелы ).


Как просматривать данные, отлаживать, принимать решения и формировать команду

Определение нужных полей в этом файле длинными строками — это задача для программы. Сначала используйте awk, чтобы увидеть, что есть в этих строках. Сначала лучше просмотрите и поймите этот файл, а затем решите, какую команду вы хотите выполнить. Подсчет полей вручную (на глаз )для таких длинных строк затруднен.

Например, проверьте только первую строку. Бег

awk 'NR==1 {for (i=1;i<=NF;i++) print i, $i}' file

даст вам индекс поля и значение для всего содержимого:

1 chr15_pilon_pilon.g1.t1
2 XP_016515887.1
3 XP_016515887.1
4 PREDICTED:
5 uncharacterized
6 protein
7 LOC107832536
8 [Nicotiana
9 tabacum]
10 2.7e-36
11 161.4
12 407
13 95
14 200
15 1
16 94
17 88
18 181
19 MKVAEMRMLRWMCGHTRLDKIKNEVIREKVGVAPVEEKMREATLRWFGNVRRRSPDAPVRNCERLEIVGGRRDRGRPKKYWGELIRQDRTRMQV
20 MKVAEMRMLRWMCGLTRLDKIKNEVIREKVGVAPVDEKMREARLMWFGHVRRRSPDAPVRSCERLAVVGASRGRGRPKRYWGEVIRQDMAKMRI
21 MKVAEMRMLRWMCGHTRLDKIKNEVIREKVGVAPVEEKMREATLRWFGNVRRRSPDAPVRNCERLEIVGGRRDRGRPKKYWGELIRQDRTRMQV*
22 MNFHLQDGIEKGLVENDKKDHGEDERNDHEQDGRNDHVEVEPLAMTHETWKTELQVCLKGKFYKAVVRPAMLYGVECWPVKNSHVQRMKVAEMRMLRWMCGLTRLDKIKNEVIREKVGVAPVDEKMREARLMWFGHVRRRSPDAPVRSCERLAVVGASRGRGRPKRYWGEVIRQDMAKMRISEDMTLDRKVWRSSIRVVG
23 161.4
24 407
25 94
26 80.9
27 76
28 18
29 85
30 0
31 0
32 90.4
33 0
34 14HL20ED6TR1RM3NH11NS4EAIV2GARS1DG5KR4LV4RMTARK1QRVI
35 80.9
36 2.7e-36
37 98.9

Или то же самое, чтобы получить индекс и значение полей только для числовых значений:

awk 'NR==1 {for (i=1;i<=NF;i++) if ($i==$i+0) print i, $i}' file
10 2.7e-36
11 161.4
12 407
13 95
14 200
15 1
16 94
17 88
18 181
23 161.4
24 407
25 94
26 80.9
27 76
28 18
29 85
30 0
31 0
32 90.4
33 0
35 80.9
36 2.7e-36
37 98.9

Обратите внимание, что проверка $i+0 == $i— это стандартная идиома awk для проверки того, является ли поле числовым значением.

Теперь вы видите свои данные. Вы можете распечатать некоторые поля для большего количества строк, если вам нужно. Вы можете решить и сформировать свою команду в соответствии с вашими потребностями.

6
18.03.2021, 22:54

Теги

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