чтение (2) блокирование изменений поведения, когда pts закрыт, что приводит к ошибке чтения () возврат: -1 (EIO)

Вы хотите посчитать количество раз или количество строк, в которых появились вишни?

awk -F, '$0~k{s=s (s?", ":x) $(NF-1); t+=gsub(k,x)}
         END{printf "food: %s\n%s appeared %d/%d times\n", s, k, t, NR}
        ' k=cherries file

или

awk -F, '$0~k{s=s (s?", ":x) $(NF-1); t++}
         END{printf "food: %s\n%s appeared in %d/%d lines\n", s, k, t, NR}
        ' k=cherries file
1
01.11.2018, 19:50
2 ответа

В комментариях вы говорите, что fileидентифицирует текстовый файл как текстовый файл ASCII с окончаниями строки CRLF. Это еще один способ сказать, что это текстовый файл DOS, возможно, созданный с помощью редактора в системе Windows.

Текстовый файл DOS имеет, по сравнению с текстовым файлом Unix, дополнительный символ возврата каретки в конце каждой строки перед новой строкой. Вот почему ваше регулярное выражение не соответствует, на самом деле ни одна строка не заканчивается на me, они заканчиваются на me\r, где \r— это распространенный способ написания символа возврата каретки.

Решением этой проблемы является преобразование вашего текстового файла в текстовый файл Unix с использованием, например,. инструмент преобразования dos2unixперед его использованием в системе Unix.

1
27.01.2020, 23:42

Само по себе grep "me$"определенно верно. Я подозреваю, что ваши строки заканчиваются несколькими дополнительными символами, которые трудно увидеть, такими как табуляция и пробелы.

Попробуйте один из этих:

# \t means tab
# [\t ] means a tab or a space
# [\t ]* means any number (including zero) of tabs and spaces.
#
grep "me[\t ]*$" sm.txt

или:

# [[:space:]] means any white space. I don't know if there are
# more than just space and tabs. This works with GNU grep only.
#
grep "me[[:space:]]*$" sm.txt
0
27.01.2020, 23:42

Теги

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