Написание сценария, который показывает, сколько строк имеет «X» и «Y» в нем?

Я делаю курс в Linguistic, и я бы хотел использовать сценарии оболочки, чтобы помочь мне делать несколько повторяющихся вещей, например, подсчет, кто задает вопросы. Вот часть файла, который я открыл и работаю с командой gedit

Антуан: Il a du

Eliahou: (Eliahou se penche) Chez Ubisoft? T'as du faire la queue?

Дельмас: Non j'ai pas fait d'queue.

Eliahou: directement ils t'ont donné ça, t'es arrivé …

Антуан: // Bonjour je voudrai un lapin-crétin.

Дельмас: Eu :: f //, Euh un 'tit speech quand même.

Eliahou: Ha, tu leur a parlé ° (quand même un peu)?

Дельмас: Oui bien sûr.

Я ищу для написания общего сценария, который показывает, сколько строк имеет «X» и «Y» в нем? Я смотрю, например, о том, как написать скрипт, который дает имя и количество встречающихся имен, связанных с переменной. Например, в диалоге Элайот спрашивает два вопроса.

Точнее:

  • который задает вопросы (у кого есть «?» в их цитате), сколько времени
  • кто отрезал кого-то, (у кого есть «//» в их цитате)
  • кто повторяет чьи-то предложения
  • кто делает некоторые элиции («t'es» вместо «tu es» («вы», а не «вы есть») и на какой частоте …

Для первого я думал о

 # usage nbocc String File grep $1 $2 >temp wc -l <temp rm temp 

его результат:

 MyComputer:~$ sh compteurQuestions ? Communication 8 

Тем не менее, у меня нет людей с такой командой … Как я должен их делать?

Я знаю, что я должен использовать

 ^........ 

потому что максимальная длина имени здесь 8. Но это довольно жестокий подход, я ищу более элегантный

Я попробовал с awsome скриптом, данным Jay jargo, но кажется, что есть проблема, поскольку после написания с фактическим текстом $ compteurQuestions -vs="?" exempleCommunication $ compteurQuestions -vs="?" exempleCommunication , я получаю Delmas 12 0 . Однако Дельмас спросил по крайней мере один вопрос: Delmas : ils l'ont plié ?

фактический текст

(Tout le monde est assis face à la caméra sauf Matthieu) Antoine: Allumlalum … Elal …

Eliahou: c'est mieux pour toi! c'est mieux pour toi!

Matthieu: Mais t'inquiè :::: te!

Eliahou: * Il est allumé là?

Антуан: * Allume // Matthieu: Ca, C'est bon, ça // sinon sinon [Antoine se lève] // Matthieu: * Non mais, on s'voit tous, ya rien qui va bouger, t'inquiète assieds- тои. * Non mais // Matthieu: Mais ça va pas bouger. // non, mais au moins pour vérifier.

Eliahou: Non, non laisse le // Matthieu: Regarde on bouge pas non plus [Matthieu s'assoit] // non, non mais c'est mieux qu'on se voit. // Антуан: Si si // nan, nan

Matthieu: C'est trop perturbant // [Eliahou pointe l'écran du doigt] //

Антуан: La dernière fois qu'on, la dernière fois on l'a pas fait [Антуан прикасается к ординатуре] // Матфей: Хааа Нан ​​Хааа Je vois un écran là //

Антуан: [Antoine présente un lapin-crétin] Les amis j'vous présente Bob, Bob le gri-gri.

Дельмас: C'est un cadeau du Forum.

Antoine: Salut les amis, Hey! (Il lève un sourcil) Tiens, on te passe le grigri, celui qui a le grigri a le droit de parler // Matthieu: Quand tu sais combien … // [Delmas prend le lapin -crétin, костюм Matthieu уважение]

Eliahou: Tu l'as eu au forum, жанр [il point le gri-gri du doigt]? //

Антуан: C'est lui qui a la parole. [Antoine pointe Delmas du doigt] //

Дельмас: Oui chez Ubisoft.

Антуан: * Il a dû …

Eliahou: [se penche] * Chez Ubisoft? T'as du faire la queue?

Дельмас: Non j'ai pas fait d'queue.

Eliahou: directement ils t'ont donné ça, t'es arrivé … // Antoine: Bonjour je voudrais un lapin-crétin. // // Дельмас: Eu :: f, // Euh un 'tit speech quand même.

Элайоу: Ха, ту леур, как и в то же время?

Дельмас: Oui bien sûr.

Элайоу: «Я не знаю, что ты делал», и «айриш туй леур», как [илл.]. «Клеш». «Кэст ça».

Дельмас: Войла. [signe de la main gauche qui se lève et retombe]

Антуан: Bonjour Delmas apprenti lapin crétin // Дельмас: Нан Маис, [écarte le bras gauche et fait non de la tête] après le Forum ça sert presque à rien, ils ne veulent que des des // des longs si … Et des trucs de six mois. [acquiesce et lève les yeux]

Дельмас: // Уай, вуаля.

Элия: Ах, шесть, ай уай? Иер чуй парти [Delmas remonte ses lunettes et se gratte le nez] avec une personne qui voulait … euh … pas faire de stage là bas, Juste ramasser des petits gadgets nan mais vraiment, yen a ya des personnes, [Дельмас lève le doigt) et tu lai … // Антуан: huhu !!! c'est vrai? //

Matthieu: r'garde Mohammed, tout à l'heure il est revenu avec du liquidide vaisselle.

Антуан: ХАХАХА! [se tape la cuisse] il aurait [lève le doigt] même pu passer chez Etam lu grpus au pus [doigt index]

Matthieu: J'ai J'ai même envoyé un sms à Mariam, tu pouvais même trouver à bouffer, le Printemps ils ont ramené à bouffer

Элайо: Сери? (interloqué) Putain, holala // Дельмас: Pffft! (tête sur le côté) Euuuuh La vérité, Hier j'y étais mais pas // pour ramasser //

Антуан: (неразборчиво) tu dis la vérité, Hinhinhin

Eliahou: la vérité … [écarte de temps en temps les mains] nan sérieux j'y étais hier et puis moi chui parti pour trouver un stage, 'fin pour trouver un stage, pour essayer de ramasser un peu des gadgets aussi.

Антуан: Хин Хин Хин! Vas-y, nous t'écoutons … // Eliahou: Et puis baaah, dès que t'arrives ya énormément de monde, c'est assez frustrant t'as po envie de faire la queue // toi tu veux ton p 'tit gadget, ^ (ton petit lapin-crétin) hin hin hin? // Eliahou: Et j'veux продают гаджеты с петитом. E :::: t puis euh dès que j'arrive à un moment chui arrivé jusqu'au bout du du forum e ::: t yavait personne, ché plus c'était qui quelle société ils cherchaientt des stagiaires. Donc euuh, mais bon … j'me demandais

Антуан: Ca m'parait louche [pointe Eliahou du doigt], là louche

Элайоу: Камарасисайт-луш.

Антуан: Ca m'paraissait louche [pointe le doigt vers le ciel]

Eliahou: je leur ai laissé mon cv euhhhh, ils l'ont gardé, ils l'ont plié, ils l'ont mit de coté et j'suis parti

Антуан: euh euh les cv

Дельмас: ils l'ont plié? [En faisant le geste avec les mains]

Eliahou: ouais [hoche la tête]

Дельмас: ils l'ont plié [Antoine: claque des mains] rire de tous

Антуан: shiiiiiiiit [fait semblant de déchirer du papier]

Matthieu: oh ca veut tout dire [se gratte le pied et se repenche derrière] ouais c'est cool, ça c'est eh, ca c'est eh

Eliahou: mais vous y êtes tous allés [montre tout le monde du doigt], toi t'es allé, toi t'es allé? // Delmas: oui moi j'y suis allé, j'y vais depuis euh // // Matthieu: non [en hochant la tête] // et qu'est-ce que tu посещает alors? [Matthieu: hoche les épaules] >> T'as fait ton cv au moins? Ils prenaient ton cv là-bas non, pour les gars qui ………

Антуан: [croise les pieds] mais mais mais, moi j 'avais les cv pour luiiiiiiii [en donnant des points sur ses cuisses] non mais, il beh il marchait pour moi // Eliahou: ça c' est vrai, il changeait juste la photo // // Matthieu: посещает майс il avait сын сын cv // oui voilà, tu ne voudrais pas essayer ça? [Donne un coup de coude à Matthieu].

Дельмас: après les compétences euh ne sont pas les mêmes [Антуан: ballait un coup de la main comme quoi ce n'est pas grave]

Маттие: ах бхух оуа

Антуан: ouais mais mais t'as fait des maths dans ta jeunesse? [Hoche la tête et se tape à plusieurs resises les cuisses] * rire de tous *

Дельмас: t'as fait un peu'd C? [Tendant la main vers Matthieu] >> T'as fait un peu'd C?

Matthieu: ouais ouais j'ai fait un peu de C // Antoine: ouais [baisse la tête et croise les mains sur ses genoux] // [serre ses doigts]

Eliahou: t'as fini d'écrire ta lettre? [Сопровождающий Маттиу и Луи Тенант ла-лайн] // Антуан: t'as quand même euh, >> tu sais écrire une lettre [tapote Matthieu], t'as >> fait une lettre à ta maman quand même? //

Matthieu: je déteste ça, [отношение Antoine dans les yeux], [Eliahou se mordille les ongles des doigts] * rire d'Antoine * // Delmas: voilà //

Eliahou: et sinon les steps euh vous avez trouvé

Антуан: moi je l'ai déjà

Eliahou: et toi [montre Delmas du doigt] non mais toi t'as ton stage en anglais

Антуан: c'est vrai [en souriant]

Дельмас: не-мажор с 'est que l' entretien, après euh c 'est pas sure qu' ils me prennent // Антуан: ouï tu m 'avais dit euh ch' était cro bizarre euh // si si c 'est bizarre [ se gratte le nez] (тишина)

Eliahou: non mais c'est pas fini la? // Дельмас: Non mais c'est chaud hein // il reste combien de temps là?

Matthieu: на страстном удалении, и на répétait ce qu'on avait dit la dernière fois * rire de tous *

Антуан: si si [se claque la cuisse] // Eliahou: et qu'est-ce qu'on avait dit? // qu'il y 'avait le psg, non mais c' était le psg, vous avez vu? [Continu de se claquer les cuisses]

Eliahou: ouais je l'ai vu

Антуан: и другие?

Eliahou: ils ont perdu // Антуан: ah les Chelsea // contre Chelsea // Matthieu: ouais je l'ai vu //

Delmas: non mais euh ça pouvait pas être la dernière fois passeu euh le match euh, il était mardi et s 'est enregistré euh * rire de tous *

Антуан: non mais euh, на enregistré mardi

Matthieu: на enregistré lundi [se rapprochant d'Antoine]

Дельмас: à 10h * rire de tous * [манипулятор un bonhomme en jouet entre les mains]

Антуан: oulaaaa * rire * il me we you we you we are you a you you you you [ru] [ru]

Matthieu: et tout ça il va falloir qu'on retanscrive * rire de tous * // Антуан: c'est pas grave euh //

Eliahou: [fait des gestes] non mais qu'est-ce qu'il est malade ce mec * rire de tous *

Антуан: [montre Delmas du doigt] non mais dans les didascalies, on mettra les grands yeux, tout cru tout nu, presque tout cru tout nu [касаться le jouet de Delmas] comme BOB notre euh ….

Eliahou: je vous предлагать de unie petite dédicace à la prof pour avoir une bonne note, on va parler de …

Антуан: c 'est ça, cette vidéo c'est pour toi [montrant la caméra du doigt]

Matthieu: d'accord

Элайоу: Ту т успокоится [en souriant, уважающий Антуан].

Антуан: Ту, успокаивается [en faisant un signe de l'index réprobateur]. Bon d'accord.

Eliahou: Faut parler d'un sujet là assez euh … Euh важно, intéressant. [les mains ouvertes, explicatives, les doigts écartés].

Антуан: Les présidentielles américaines [fixant Eliahou, les mains sur les genoux].

Элайот: Хейн! (la tête s'approchant d'Antoine)

Eliahou: Qu'est-ce que tu penses de … [la main gauche se levant] // [Matthieu tourne la tête] // Qu'est-ce que j'y connais moi en … démocratie // Antoine: En démocratie pour moi c'est la même выбрал [Antoine lève la main droite pour saluer une personne qui entre] // en … républicain (bougeant les mains) je sais que Donald Trump il est haut? [levant la main gauche pour appuyer son offer] mais c'est un milliardaire.

Matthieu: C'est c'est un milliardaire.

Антуан: [Salue à nouveau avec la main droite] Euh … О том, как это сделать.

Элайот: Д'Эбсауше.

Matthieu: Ciao!

Eliahou: L'affaire Aurier. [la main gauche ouverte, utilisant son index pour commencer son offer]

Антуан: C'est quoi l'affaire Aurier [interrogatif, se rapprochant de Delmas]?

Eliahou: Ah ouais l'affaire Aurier rolala, Serge Aurier du PSG.

Антуан: Le PSG?

Matthieu: Je sais que c'est stornant de débilité rires

Антуан: Mais c'est quoi c'est quoi c'est quoi? [se rapproche d'Eliahou]

Элайот: Euuuh …

Matthieu: Je n'ai pas dit

Eliahou: Ту-ла-конне-ли? [Турнир в театре Антуан]

Антуан: C'est un c'est un oui c'est un … [le pouce et le majeur droit sur le menton, se creusant la tête]

Eliahou: C'est comme Snapchat

Matthieu: En live

Eliahou: Ou voilà en en live

Дельмас утверждает, что чучатоант

Антуан: Eh ben eh ben?

Элайо: Э-э-э-э-э-э-э-э-э-э-э-э-э-э 7/8 минут // Маттие: Ой иль оскорбит. // où il insultait où il insultait voilà son coach son entraîneur // Matthieu: Et après il s'est excusé, il a dit // ses collègues // Matthieu: жанр il a traité des gens de fiottes // voilà // Matthieu : et dans la presse il a dit: «Je ne voulais pas dire fiotte, je voulais dire PD». D'accord, merci. rires de tout le monde Извините de malade.//

Eliahou: Ça j'y crois pas trop [указательный индекс сына, версия Matthieu]

Matthieu: Vraiment c'était écrit [haussant les sourcils] // Eliahou: Y'a pas que ça aussi //

Антуан: Et ce monsieur, c'était un joueur? // Eliahou: Oui un joueur de foot //

Антуан: Pourquoi à chaque fois c'est [levant la main et la tapant sur sa cuisse]

Matthieu: Parce qu'ils sont joueurs … de FOOTeuh! [en s'avançant vers Antoine]

Антуан: Необычный мир

Eliahou: Je pense qu'il s'est mis tout le vestiaire à dos // Antoine: Du coup // du coup il va plus jouer jusqu'à la fin de la saison // Маттие: Тант-мей // Антуан: Бен-тант pis pour lui hein [haussant les sourcils] // Eliahou: Mais c'est un très bon joueur //

Антуан: Même si t'es beau, quand t'es con tu vas pas très loin rires

Eliahou: Ouais c'est vrai ça je sais pas … // Антуан: C'est pas // j'ai pas envie de parler des gens politiques [envoie un baiser vers la caméra] // Антуан: C'est pas russe Périscope parce que t'avais Maxime … // // Matthieu: Pas du tout. Nan nan nan nan nan // // Antoine: Bizarre, chelou [en abaissant la tête pour appuyer son offer] // Matthieu: Maxime c'est juste qu'il a trouvé une fille sur Périscope pendant le cours d'UML à poil qui était en train de se déshabiller rires de Matthieu et Eliahou

Антуан: Олалааа … [mettant une main sur son visage] tu fais quoi Maxime? Parce que Maxime lorsqu'il travaille c'est // Eliahou: On va faire la version non censurée hein [levant l'index pointant tout le monde du doigt] rires

Маттие: Ça va être marrant

Antoine: Tout s'est bien passé [appuyant son offer avec une main de bas en haut sur la cuisse] rire

Eliahou: Vous avez quoi là après tout à l'heure? // Антуан: Bah comme toi, réseaux [frappant sa main sur sa cuisse]! // // Matthieu: parle doucement On n'y va pas. // … // Moi aussi j'ai rien … Ah réseaux, c'est quoi?

Антуан: Réseaux, com … T'étais pas là ce matin? «Яавиат» проводит переговоры, и в то же время, и в то же время, когда речь идет о том, чтобы совершить поездку и совершить поездку в Матью? // Matthieu: Nan pas du tout // mais … // Matthieu: Mais moi j'étais, j'me suis pas réveillé // rire

Antoine: nan moi je crois, nan c'est ça c'était Sarah … Sarah qui avait fait m'sieur m'sieur [geste en levant le doigt vers le haut] et lui il s'casse en courant [fait un geste de la main droite mimant une personne qui court] rire général

Дельмас: c'était pas Sarah c'était moi en fait [rire de Matthieu en se balançant sur sa chaise] en fait on attendu déjà 40 минут // Антуан: ouai ouai // après on est monté chez Mathieu // Matthieu: ils ont DEJA attendus 40 минут [en s'adressant a Antoine] // lorsqu'on est rentré on l'a vu il était avec une dame il avait l'air euh décontracté [geste des mains imitant la décontractioné] on lui a dit «На avait cours» [pointant le doigt vers le haut en le faisant trembler] alors il a dit ah ouais ??! [En prenant la voix de quelqu'un d'étonné] Rire général // Antoine: nan mais il se fout de nous // mais écoutez j'suis désolé euh rigole // Антуан: j'été pas au courant [en frappant ses deux mains sur ses genoux en rigolant très fort // je croyais qu'c'était entre midi et et et deux mais j'sais pas.

Eliahou: настенький кувшин,

Matthieu: comme nous rigole // Antoine: p'tit croissant hein // tant pis c'pas grave on n'ira pas c'est tout (…)

Eliahou: персональный персонаж j'dois faire mon sport [fait un geste de la main en montrant une direction]

Антуан: ah ouai c'est vrai lui il va à la salle c'est un sportif [en montrant Eliahou du doigt]

Eliahou: lui il fait l'marathon c'est un sportif aussi [en montrant du doigt Antoine]

Антуан: et et la salsa // Eliahou: ah ouai et la salsa rigole // major major de la salsa [en pointant le doigt vers le haut] // Дельмас: avec 12 // [rire général et Antoine qui rigole en mettant ses deux mains sur la figure] alors que là en communication [en montrant avec sa main la salle de classe] quand ta 12 c'est la pire des notes alors que là c'est la meilleur

Дельмас: ouai ouai

Matthieu: c'est dl'a conneries

Дельмас: et encore j'pense qu'on qu'on va s'prendre au moins 17 là

Антуан: ПЛЮС [en élevant la voix, en serrant le poing puis le frappe sur son genou] moi j'veux mille mille mille sûr [en tapant du poing sur son genou à chaque répétition]

2 Solutions collect form web for “Написание сценария, который показывает, сколько строк имеет «X» и «Y» в нем?”

Попробуйте:

 #!/usr/bin/awk -f BEGIN { wordssize=split(s,words,"%"); if (wordssize==0) { words[1]=s; wordssize=1; } characterssize=0; } { if ($0 ~ /^ *[^:][^:]* *:/) { character=substr($1,1,index($0,":")-1); for (i=length(character);substr(character,i)==" ";i--){ character=substr(character,1,length(character)-1); } } if (!lines[character]) { lines[character]=1; for(i=1; i<=wordssize; i++) { markers[words[i] " " character]=0; } characters[++characterssize]=character; } else { lines[character]++; } for(i=1; i<=wordssize; i++) { line=$0; while ((position=index(line,words[i]))>0) { markers[words[i] " " character]++; line=substr(line,position+length(words[i])); } } } END { printf("%9s %s","Character","Lines"); for(i=1; i<=wordssize; i++) { printf(" %s", words[i]); } printf ("\n"); for (i=1;i<=characterssize;i++) { printf("%9s %-5d",characters[i],lines[characters[i]],markers[characters[i]]); for(j=1; j<=wordssize; j++) { printf(" %-" length(words[j]) "d", markers[words[j] " " characters[i]]); } printf ("\n"); } } 

Если текущая строка начинается с букв и :, символьной переменной присваивается найденное имя. Каждая строка текста подсчитывается для каждого символа. Каждый раз, когда встречается последовательность поиска (например ,? ), Счетчик маркеров символа увеличивается.

Если символ говорит о нескольких строках, указанному выше сценарию удастся подсчитать последовательность, например ? , во всем блоке строк.

Строка для поиска указана с помощью -vs = "?" , Одновременно можно искать несколько строк. Отделите строки для поиска с помощью % : -vs = "?% //" .

Скрипт может искать сразу несколько файлов, если имеется более одного имени файла.

На выходе символы отображаются в порядке появления.

Тест:

 $ chmod +x compteur $ ./compteur -vs="?%//%'%t'es" Communication Character Lines ? // ' t'es Antoine 2 0 1 0 0 Eliahou 3 3 0 3 1 Delmas 3 0 1 3 0 $ ./compteur -vs="?" Communication Character Lines ? Antoine 2 0 Eliahou 3 3 Delmas 3 0 

—-

первая версия для истории

 #!/usr/bin/awk -f { if ($1 ~ /^[^:][^:]*:/) { character=substr($1,1,index($1,":")-1); } line=$0; lines[character]++; while ((position=index(line,s))>0) { markers[character]++; line=substr(line,position+length(s)); } } END { printf("%9s %s %s","Character","Lines",s); for (character in lines) { printf("\n%9s %-5d",character,lines[character]); if (markers[character]) { printf(" %-3s",markers[character]); } } printf("\n"); } 

Предполагая, что переменная оболочки a содержит строку, которую вы ищете, и предполагая, что эта строка никогда не является частью имени какого-либо человека (если это так, grep -pattern необходимо расширить, чтобы соответствовать только после первого:) и предполагая, что : никогда не являетесь частью имени какого-либо лица и считаете, что a не содержит новую строку:

cat Communication | grep -F "${a}" | awk -F ':' '{print $1}' | sort | uniq -c

Не избегайте содержимого a , потому что есть -F -option для grep . Содержание a взято буквально (если оно не содержит новую строку).

Если имена человека могут содержать строку, которую вы ищете, следующие работы, но затем помните о том, чтобы избежать любых символов, в которых может быть специальное значение соответствия шаблону для grep (т. grep Если вы ищете . , Но \. в a , если вы ищете ? используйте \? и т. д.):

cat Communication | grep -E "^[^:]*:.*${a}" | awk -F ':' '{print $1}' | sort | uniq -c

Или, в частности, ответы на три из ваших вопросов:

который задает вопросы (у кого есть «?» в их цитате), сколько времени

cat Communication | grep -F '?' | awk -F ':' '{print $1}' | sort | uniq -c

кто отрезал кого-то, (у кого есть «//» в их цитате)

cat Communication | grep '//' | awk -F ':' '{print $1}' | sort | uniq -c

кто делает некоторые элиции («t'es» вместо «tu es» («вы», а не «вы есть») и на какой частоте …

cat Communication | grep "'" | awk -F ':' '{print $1}' | sort | uniq -c

(Я знаю, что все это «бесполезное использование кошки», но делает поток данных более понятным для первого cat а затем подключается к grep . Также можно использовать grep -F "${a}" Communication | [...] и т. д.)

  • linux + как игнорировать (фильтровать) файл с пространством
  • sed заменить после соответствия символа
  • Как объединить два файла на основе соответствия двух столбцов? CSV
  • Помощь при проверке выполнения предыдущей команды
  • Измените dir из сценария без «процедуры оболочки» или «поиска сценария»,
  • Использование rename для удаления '.orig' из файла и добавления '_1' в basename
  • Как запустить программу, перенаправить ее вывод и отобразить вывод на экране?
  • Для цикла работает, но петли дважды
  • Как проверить, содержит ли строка подстроку в тире или золе?
  • хранить последний файл каждого месяца и удалять остальные
  • Крошечный и простой скрипт терпит неудачу, и это результат «Нет такого файла или каталога»,
  • Interesting Posts

    Сравните два файла для соответствия строк и сохраните положительные результаты

    как устранить прерывистую ошибку маршрутизации на хост

    Является ли ext2 подходящим для ежедневного использования на рабочем столе или ноутбуке?

    Расширение раздела с использованием LVM

    «Ip route get» показывает неправильный IP-адрес источника

    Почему «дата» не уважает мой язык?

    Как распределить вычисления «tar czf» в течение длительного времени?

    мы можем получить отсортированный выход grep

    xrandr: границы отображения отключены

    Обработка ввода для команды чтения как самой команды

    Перемещение резервного хранилища контейнера LXC

    Вывод различных строк при сравнении двух файлов

    Нужен абсолютный путь для каждой строки из текстового файла с использованием сценария оболочки

    Запустить сценарий оболочки после перезагрузки в beaglebone black

    найти набор общих файлов между несколькими каталогами?

    Linux и Unix - лучшая ОС в мире.