LINUX.ORG.RU

Нужна помощь с объяснением кода на bash

 


0

5

Дано задание: Для заданного текстового файла составить список всех слов, входящий в этот текст, и подсчитать количество вхождений каждого слова. Результат выдать в порядке убывания количества вхождений. Друг помог с кодом, но не успел его объяснить...Помогите. Ссылку залил на фотохостинг - http://vfl.ru/fotos/6934087c15403744.html (А, то код на форуме пишется в одну строчку)

Скрипт же примитивнейший, это вам к преподавателю надо

ism ★★★
()

что случилось с другом?
чо по деньгам?

сначала ответь на второй вопрос

zolden ★★★★★
()

А, то код на форуме пишется в одну строчку

Вот когда разберешься с форумом, тогда может и скрипт сам осилишь.

surefire ★★★
()

Я тебе в личку кинул номер кошелька, как оплатишь, объясню.

Black_Shadow ★★★★★
()

Для решения кода-то и будет на одну строчку, а на картинке по ссылке боль.

В любом случае, откопай друга обратно, пусть он сам доведёт дело до конца.

manntes-live ★★★
()

не успел его об’яснить

Хорошо, я попробую об’яснить в меру своего разумения. Код вашего друга представляет собой винегрет из: а) написанных с ошибками по идее рабочих, но дурных решений; и б) написанных с ошибками дурных и заведомо нерабочих решений.

Читать то, куда вас посылает товарищ Kroz, пока решительно не советую — а то в целом так и будете писать, как ваш «друг».

Zmicier ★★★★★
()

Друг помог с кодом, но не успел его объяснить...

Скажи другу, что за такой говнокод можно и томиком Advanced Bash Scripting Guide по лицу получить.

IPR ★★★★★
()

Если друг пишет такой код на заказ, то я даже и не знаю — друг ли он тебе.

justAmoment ★★★★★
()

А можно было бы и не выёживаться перед нубом, грамотеи херовы

На лоре код обрамляется в теги [code] [/code], тогда он не будет писаться в одну строчку.

В первой строчке вместо #1/bin/bash должно быть #!/bin/bash. #! - это шебанг, указывает на программу-исполнитель файла при предоставлении ему исполняемых прав. А тут, видимо, «друг» шифт нажать забыл.

Во второй строчке вместо (""="$1") должно быть [[ "" == "$1" ]] (и да, позиксоиды, пройдите в зад). Круглые скобки возле ифа (кстати, они тоже должны быть двойными) - арифметическое сравнение, квадратные - именно литеральное/строковое.

После присваивания trueList вообще какая-то вакханалия творится. Кавычки там явно не те, должны быть бэктики как минимум (то есть `вот такие`), но вообще такое немного по-другому делается.

Дальше всё вроде бы нормально, хоть и с избыточным присваиванием. Единственное, что после sort пробел бы поставить.

Так что кури мануалы и дальше разбирайся сам.

anonymous
()

А можно было бы и не выёживаться перед нубом, грамотеи херовы

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

Black_Shadow ★★★★★
()
#!/bin/bash

`perl -le 'while(<>) { @w = split(" ", $_); for (@w) { $wc{$_}++ } } for (keys %wc) { print "$_ - $wc{$_}\n" }' "$1"`
redgremlin ★★★★★
()
Последнее исправление: redgremlin (всего исправлений: 1)

Вот есть такое движение «бадипазитифф». Так что запустим новое движение «мозгапазитифф». Лозунг: «Каждые мозги — нужны, важны и применимы!» Так что не будем уподобляться всяким ракалами и дадим каждому по мозгам!

В рамках данного раздела спецолимпиады делаем всё на божественном питоне.

Образец текста

$ cat x_y.txt 
ko ko ko
too doo doo
tu tu tu doo tu du
Манипулирующие инструкции
$ cat L_x_y.py 
#!/usr/bin/env python
from collections import Counter
raw_x = open("x_y.txt", "r").read().split()
print "x_y.txt = ", raw_x

print "--------"
c1 = Counter(raw_x)
for key, value in c1.items():
	print key, "=", value

print "----sorted----"
for key, value in c1.most_common():
	print key, "=", value
Результец
$ ./L_x_y.py
x_y.txt =  ['ko', 'ko', 'ko', 'too', 'doo', 'doo', 'tu', 'tu', 'tu', 'doo', 'tu', 'du']
--------
du = 1
tu = 4
ko = 3
too = 1
doo = 3
----sorted----
tu = 4
ko = 3
doo = 3
du = 1
too = 1

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

замени print "" на print(""), а то будет SyntaxError: Missing parentheses in call to 'print' в 3-м пайтоне.

Black_Shadow ★★★★★
()
Последнее исправление: Black_Shadow (всего исправлений: 2)

.. | sort | uniq -c | sort -r

норм, остальное - не очень, для разбиения на слова склоняюсь к такому:

awk -v OFS='\n' 'NF {$1=$1; print}'

anonymous
()

Двустрочник

#!/bin/bash
(for w in $(<$1);do echo ${w,,};done)|tr -d '.,():!?_"^C'|sort|uniq -ic|sed -e 's/^\s*//'|sort -rn

Пока не разберёшься, что он делает - не возвращайся.

anonymous
()
Ответ на: Двустрочник от anonymous

Вместо ^C в предыдущем посте читать *#.

#!/bin/bash
(for w in $(<$1);do echo ${w,,};done)|tr -d '.,():!?_"*#'|sort|uniq -ic|sed -e 's/^\s*//'|sort -rn
anonymous
()
Ответ на: Двустрочник от anonymous

Пока не разберешься, что он делает, не возвращайся.

Извините, но разбираться в таком — себя не уважать.

Zmicier ★★★★★
()
Ответ на: комментарий от anonymous

Что «я тоже»? Не уважаю себя? Бывает, что да. Но это мой выбор, он не дает вам повода посылать человека разгребать наваленную вами кучку write-only кода. Вы думаете, что это ему наказание за лень, а он решит, что так на самом деле и нужно писать.

Кстати, лишняя подоболочка здесь не обоснована даже с точки зрения выбранного вами стиля.

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.