「X」と「Y」が何行であるかを示すスクリプトを書いてみてください。

「X」と「Y」が何行であるかを示すスクリプトを書いてみてください。

私は言語学コースを受講しており、質問した人数の計算などの繰り返し作業を行うのに役立つシェルスクリプトを使用したいと思います。これは私が開いてコマンドを使用したgeditファイルの一部です。

アントアン:私はあなたです。

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

デルマス:並んで待ってはいけません。

Eliahou:指示はありません。到着...

アントワーヌ: //Bonjour je voudrai un lapin-crétin.

Delmas: Eu::f//, Euh un 'tit voice quand même.

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

デルマス: Oui bien sûr。

「X」と「Y」を含む行数を示す一般的なスクリプトを作成しようとしています。たとえば、変数に関連付けられた名前とその名前が表示される回数を提供するスクリプトを作成する方法を探しています。たとえば、会話中にエリヤフは2つの質問をしました。

具体的には:

  • 誰が質問し(誰の引用に「?」が含まれているのか)、質問するのにどれくらい時間がかかりますか?
  • 誰かを邪魔する人(引用文に「//」が含まれています)
  • 誰かの言葉を繰り返す人
  • 誰がいくつか省略した(「tu es」の代わりに「t'es」(「you are」の代わりに「you're」))、どのくらいの頻度で...

最初に思い浮かぶ人のために

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

結果は次のとおりです。

MyComputer:~$ sh compteurQuestions ? Communication
8

ところで、そんな指揮権を持った人がいないのに…それならどうすれば持つことができるでしょうか?

私は使用する必要があることを知っています。

^........

ここでは、名前の最大長は8です。しかし、これはやや残酷なアプローチなので、よりエレガントなアプローチを探しています。

Jay jargoが提供する素晴らしいスクリプトを試してみましたが、実際のテキストで書いてみると問題があるよう$ compteurQuestions -v s="?" exempleCommunicationですDelmas 12 0。しかし、デルマスは少なくとも1つの質問をしました。Delmas : ils l’ont plié ?

実際のテキスト

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

エリアホ:嬉しいですね!よろしくお願いします!

マシュー: Mais t'inquiè::::te!

Eliahou: *Il est allumé là?

Antoine: * 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 verifier.

Eliahou:いいえ、自由放任はできません// Matthieu:注意してくださいbouge pas non plus [Matthieu s'assoit] //いいえ、no mais c'est mieux qu'on se voit。 //アントアン:シシ//南、南

マシュー: C'est trop perturbant //[Eliahou pointe l'écran du doigt]///

Antoine: La dernière fois qu'on, la dernière fois on l'a pas fait [Antoine touche à l ordur] //Matthieu: Haaaa Nan Haaa Je vois un écran là//

アントワーヌ: [Antoine présente un lapin-crétin] Les amis j'vous présente Bob, Bob le gri-gri.

デルマス:ここがフォーラムの舞台です。

Antoine: Salut les amis, Hey!(il lève unourcil) Tiens, on te passe le grigri, celui qui a le grigri a le droit de parler //Matthieu: Quand tu sais commien...// [Delmas prend le lapin ] -crétin, Mathieu Suit du Respect]

Eliahou: Tu l'as eu au フォーラム, ジャンル [il point le gri-gri du doigt]? //

アントアン:これは仮釈放です。 [アントゥアンポアンテデルマスドゥドゥイト] //

デルマス:こんにちは、ユビソフトです。

アントアン:*私は本当に…

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

デルマス:並んで待ってはいけません。

Eliahou: directement ils t'ont donné ça, t'es arrivé... //Antoine: Bonjour je voudrais un lapin-crétin.// //Delmas: Eu::f, // Euh un 'tit voice quand même.

エリアホ:ハ、今私に言ってるの?

デルマス:そうです。

Eliahou: A la fin ils t'ont dit, "Non on a pas besoin de toi" et après tu leur as [il fait un geste pour ramener quelque selected vers soi] "Chpeux tomar quand même ça".これは。

デルマス:見てください。 [signe de la main gauche qui se lève et retombe]

Antoine: Bonjour Delmas apprenti lapin crétin //Delmas: Nan mais, [é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トラック6台。 [認めて去る]

デルマス: //ウアイ、見てください。

Eliahou:ああ、6つのモイス、ああ、ワイ? Hier chuiparti [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 devices nan mais vraiment, Yan a ya des personnes, [ Delmas lève le doigt)et tu lai ... / /アントアン:ハハ! ! !これはブライですか? //

マティエ(Mathieu):ムハンマドの守護者、常に流動的な収入。

アントゥアン:ハハハ ! [se tape la cuisse] il aurait [lève le doigt] même pu passer chez Etam lu grpus au pus [doigt index]

Matthieu:マリアムと一緒に楽しい時間を過ごすのに良い時間です、悪いこと、ブッパー、悪いこと、悪いことです。

エリヤフ:セリエ? (ナレーション)プーチン、ホララ//デルマス:パン! (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 devices 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 enie de faire la queue // toi tu veux ton p胸のデバイス、^(ton petit lapin-crétin)ヒンヒンヒン? //Eliahou:Et j'veuxはガジェットをお勧めします。 E::::t puis euh dès que j'arrive à unmoment chui jusqu'au bout du forum e:::t yavait personne, ché plus c'était qui quelle société ils cherchaientt des Stagiaires.. .j'medemandais

アントゥアン: Ca m'parait louche [pointe Eliahou du doigt], là louche

Eliahou: Ca m'paraissait louche。

アントゥアン: Ca m'paraissait louche [pointe le doigt vers le ciel]

Eliahou:私は自由が大好きです、私の履歴書、私の警備員、私私、私私、私の友達

アントゥアン:アーハーレ履歴書

デルマス:これは私の仕事ですか? [En faisant le geste avec les mains]

Eliahou: ouais [hoche la tête]

Delmas: ils l'ont plié [アントゥアン: claque des mains]Lired Tous

Antoine: shiiiiiiiit [fait semblant de déchirer du papier]

Matthieu: oh ca veut tout dire [se gratte lepied 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 presents alors ? ]>> T'as fait ton cv au moins ?ils prenaient ton cv là-bas non, pour les gars qui..........

Antoine: [croise les pieds] mais mais mais, moi j' avais les cv pour luiiiiiiiii [en donnant des point sur ses cuisses] non mais, il beh il Marchait pour moi // Eliahou: ça c' est vrai, il Change a写真//マティユ

Delmas: après les compétences euh ne sont pas les mêmes [Antoine: ballait uncou de la main Memorial quoi ce n'est pas grave]

マティユ:あ、そうですね。

アントアン:数学が十代の若者たちの間で一般的であることを知っていましたか? [Hoche la tête et se Tape à plusieurs reprises les cuisses] *rire de tous *

デルマス:Cはすでに本当ですか? [Tendant la main vs Matthieu] >> T'as fait un peu'd C?

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

エリアゾ:手紙は終わりましたか? [Regardant Matthieu et lui tentant la main]// Antoine: t'as quand même euh, >> tu sais écrire une lettre [tapote Matthieu], t'as >> fait une lettre à ta maman quand même ?//

Matthew: je déteste ça, [regarde Antoine dans les yeux], [Eliahou se mordille lesongles des doigts]*rire d'Antoine *// Delmas: voila//

エリヤフ:ステージ上のあなたの歌

アントアン:私は私の故郷です。

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

アントゥアン: c'est vrai [en souriant]

Delmas : non mais c' est que l' entretien , après euh c' est pas Sure qu' ils me prennent //Antoine : ouï tu m' avais dit euh ch' était cro bizarre euh // si si c' est bizarre [ se gratte le nez ] (沈黙)

エリヤフ:もう終わりませんか? // Delmas : Non mais c'est chaud hein // il Reste Comien de temps là ?

マティユ: On a rien à dire euh, et si on répétait ce qu'on avait dit la dernière fois *rire de tous*

Antoine: si si [se claque la cuisse] //Eliahou: et qu'est-ce qu'on avait dit? // psgを使用できますが、psgを使用したくありませんか? [続けてclaquer les cuissesを使用してください]

エリヤフ:大好きです。

アントアン:誰かを待っていますか?

Eliahou: ils ont perdu //Antoine: ah les Chelsea // 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 * Ribe de tous *

Antoine: non mais euh, enregistré mardi

Mathieu: on a enregistré lundi [se rapprochant d'Antoine]

Delmas: à 10h * rire de tous * [manipulant unbonhomme en jouet entre les mains]

Antoine: oulaaaa *rire * I care avec ses grands yeux [faisant des grimaces] je vais te manger tout cru, tout nu non [se Tape les cuisses et faisant des grimaces] * rire de tous *

Matthieu: et tout ça il vafalloir qu'on retrancrive *rire de tous * // Antoine: c'est pas heaven の //

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 metra les grands yeux, tout cru tout nu, presque toout cru tout nu [touche le jouet de Delmas]comme BOB notre え…

エリアホ:良い願いがあります。教授に良い願いを願ってください...

Antoine: c'est ça, cette vidéo c'est pour toi [montrant la caméra du doigt]

マシュー:着実に

Eliahou: Tu te 落ち着いて [en soriant, Dear Antoine]。

アントワーヌ: Tu te chilles [en faisant un Signe de l'index réprobateur]。頑張ってください。

Eliahou: Faut parler d'un sujet là assez え…ええ、重要で面白いですね。 [Les mains ouvertes, explicatives, les doigts écartés]。

アントワーヌ: Les présidentielles americaines [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 lvant] // [Matthieutourne la tête]// Qu'est-ce que j'y connais moi en … démocratie //Antoine : En démocratie pour 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 propos] mais c'est un milliardaire .

マシュー:これは大富豪です。

アントゥアン: [Salue à nouveau avec la main droite] まあ…

エリアゾ:ダブッシュ。

マティユ:こんにちは !

Eliyahou:アヒルの事件。 [la main gauche ouverte、実用的な息子インデックス注ぎスターター息子の提案]

アントゥアン: C'est quoi l'affaire Aurier [クエリ、se rapprochant de Delmas]?

エリヤフ:ああ、アヒエローララ、パリサンジェルマンのセルジュアリエ。

アントワーヌ:パリサンジェルマン?

マティユ:私の考えでは、これは正常な弱さの状態だと思います。リレス

アントゥアン:これだ? [se rapproche d'Eliahou]

エリアゾ: ええと…

マティユ:私はあなたを愛していません。

エリアホ:歴史を知っていますか? 【アントゥアンとの対決】

Antoine: 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:リアルタイムで視聴してください。

デルマスはチュチョタンの言葉に同意する

アントゥアン:アーベン・アベン?

Eliahou: まあ、7~8分分の動画です。 //Matthieu: Où il 侮辱です。 // où il 侮辱 ou il 侮辱 voilà son コーチ son entraîneur //Matthieu : Et après il s'est excusé, il a dit// ses collègues //Matthieu : Genreil 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 ».同意します。ありがとうございます。世界のすべてすみません、マガモ。 //

Eliahou: Ça j'y crois pas trop [マティユと息子のインデックスを指す]

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

アントアン:どんなことに興味がありますか? // Eliahou: Oui un joueur de foot //

アントワーヌ: Pourquoi à chaque fois c'est [levant la main et la tapant sur sa cuisse]

マティユ:Parque qu'ils sont joueurs…de FOOTeuh! [アンシャバン(en s'avant)対アントゥアン(Antoine)]

アントゥアン:過去の奇妙なこと

Eliahou: Je pense qu'il s'est miss tout le Ventiaire à dos //Antoine: Du coup // du coup il va plus jouer jusqu'à la fin de la saison //Matthieu: Tant mieux //Antoine: Ben tant pis pour lui hein [haussant lesourcils] //Eliahou: mais c'est un très bon joueur //

アントアン:私はあなたの美しさであり、あなたは私の恋人です。 リレス

Eliahou:Ouais c'est vrai ça je sais pas… //Antoine : C'est pas // j'ai pas enie de parler des gens politiques [envoie un baiser vers la caméra] //Antoine : 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 propos] //Matthieu : Maxime c'est just a trouvé une fille sur Périscope ペンダント le cours d'UML à poil Train your train リレス・デ・マティスとエリヤフ

Antoine:Olal​​aaaa ... [mettant une main sur son facesage]あなたは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]リレス

マティユ: Ça va être marrant

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

エリアホ:今またやりたいことがありますか? //アントアン:Bah comme toi、réseaux [frappant sa main sur sa cuisse]! // //マシュー: パレ文書ニューヨークで。 //...// Moi aussi j'ai rien... ああ réseaux, これはクォイですか?

アントワーヌ: Réseaux, com… T'étais pas là ce matin?あなたは朝の朝ですか? il était pas là et du coup c'est toi qui est allé le voir et il a fui Matthieu [pointant Matthieu avec son pouce droit]? //Matthieu : Nan pas du tout // mais… //Matthieu:Mais moi j'étais、j'me suis pas réveillé//ユリ

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]知事新聞

Delmas: c'était pas Sarah c'était moi en fait [rire de Matthieu en se balanceant sur sa chaise] en fait on a déjà 40分 // Antoine: ouai ouai // après on est monté chez Mathieu // Matthieu: ils ONT DEJA 出席 40分 [en s adressant antoine]// lorsqu'on estrentré on l'a vu il était avec une dame il avait l'air euh décontracté cours » [pointant le doigt vs le haut en le faisant trembler] alors il a dit ah ouais ?? [En prenant la voix de quelqu'un d'étonné]一般原則// Antoine: nan mais il se fout de nous // mais écoutez j'suis désolé euhリゴーレ// Antoine: 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 deux mais j'sais pas.

Eliahou: nan j'crois qui s'est pas réveillé c'est tout

マティユ: comme nousリゴーレ// アントワーヌ: p'tit croissant hein // tant pis c'pas grave on n'ira pas c'est tout (…)

エリアフ

Antoine: 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リゴーレ// Major de la salsa [en pointant le doigt vers le haut] // Delmas: avec 12 // [rire général et Antoine qui rigole en mettant ses deux mains sur la Figure] alors que là en communications [en montrant avec sa Main Salle de classe] quand ta 12 c'est la pire des note alors que là c'est la meilleur

デルマス:ワイワイ

マシュー:こちらはコーナリーです。

Delmas: et encore j'pense qu'on qu'on va s'prendre au moins 17 là

アントゥアン: PLUS [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]

ベストアンサー1

試してみてください:

#!/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 -v s="?%//%'%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 -v s="?" 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");
}

おすすめ記事