Как awk может сократить определенные поля и добавить в конец каждой строки?

Для Ubuntu: по умолчанию можно получить доступ недавно созданной учетной записи пользователя.

Для выполнения любой команды как корня, можно использовать

sudo command

затем введите свой нормальный пароль.

Корневая учетная запись по умолчанию заблокирована. Для активации корня командной строкой просто входят

sudo passwd

затем введите пароль своего зарегистрированного пользователя и затем новые пароли для корня. Теперь можно войти в систему как корневое использование su и затем введите пароль корня.

4
21.08.2018, 06:23
4 ответа

awk v1

Кажется, что Вы хотите использовать 3-й элемент пути, объединенный с последним элементом пути как модуль для проверки. В этом случае можно сделать это как это в awk:

awk -F/ '
{
  split($NF, a, "-")
  module=a[1] "-" a[2] "-" $6
  print "svn co " $0 " " module
}' list.txt

Объяснение

split отделяется $NF в дефисах в a массив (например. a[1] = issue, a[2] = 001 и a[3] = name1). Первые два элемента a затем связываются вместе с 3-м элементом пути ($6) произвести желаемое имя модуля.

awk v2

Если Ваша версия поддержек awk, указывающих разделителя полей как регулярное выражение, можно использовать эту более простую альтернативу:

awk -F'[/-]' '{ print "svn co " $0 " " $8 "-" $9 "-" $6 }' list.txt

sed

GNU sed альтернатива:

sed -r 's:(([^/]*/){5})([^/]+)/([^/]+)/(([^-]+-){2})(.*):\1\3/\4/\5\7 \5\3:'

Объяснение

  • (([^/]*/){5}) сначала пять элементов пути, отметить // счета для двух элементов.
  • ([^/]+) модуль укусил.
  • ([^/]+) ответвление укусило.
  • (([^-]+-){2}) сначала два дефиса разграничили элементы, например. issue-001-.

Вывод во всех случаях

svn co //svn.server.address/repos/project/module1/branches/issue-001-name1 issue-001-module1
svn co //svn.server.address/repos/project/module2/branches/issue-002-name2 issue-002-module2
svn co //svn.server.address/repos/project/module3/branches/issue-003-name3 issue-003-module3
3
27.01.2020, 20:58
  • 1
    Спасибо человек! Я думаю, что v1 является хорошим подходом для моей текущей ситуации, я сделаю некоторую модификацию, чтобы позволить ему соответствовать. :) –  mr.chen 29.01.2013, 11:48

Это может также быть легко выполнено с sed:

$ sed 's|\(.*/\(.*\)\)|svn co \1 \2|g' file
svn co //svn.server.address/repos/project/module1/branches/issue-001-name1 issue-001-name1
svn co //svn.server.address/repos/project/module2/branches/issue-002-name2 issue-002-name2
svn co //svn.server.address/repos/project/module3/branches/issue-003-name3 issue-003-name3
1
27.01.2020, 20:58
  • 1
    да, я также думаю, что sed может обработать это, thanks=:) –  mr.chen 29.01.2013, 10:45

Можно ли попробовать следующую команду?

cat list.txt |
awk -F'/branches/' '{a=gensub(/name/,"module", 1, $2); print "svn co  "$0" " a}'
1
27.01.2020, 20:58
  • 1
    Да, но на самом деле "модуль" может быть любыми именами. Спасибо так или иначе! –  mr.chen 29.01.2013, 11:54

$ cat d.txt // svn.server.address / repos / project / module1 / branch / issue-001-name1 // svn.server.address / repos / project /module2/branches/issue-002-name2 //svn.server.address/repos/project/module3/branches/issue-003-name3 $awk 'BEGIN {FS = "/ "} {print" svn "," co ", $ 0, $ 8} 'd.txt svn co //svn.server.address/repos/project/module1/branches/issue-001-name1 issue- 001-name1 svn co //svn.server.address/repos/project/module2/branches/issue-002-name2 issue-002-name2 svn co //svn.server.address / repos / project / module3 / branch / issue-003-name3 issue-003-name3

-2
27.01.2020, 20:58

Теги

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