Вот скрипт awk, который ищет строки, содержащие .
, ?
, или !
. Он печатает номер строки каждой строки, содержащей любой из этих знаков препинания, номер найденного знака, плюс общее количество знаков на этой строке. В конце данных выводится общий итог.
Вы можете передать ему несколько имен файлов в командной строке, и он будет вести себя так, как будто вы cat
ted все файлы вместе, но довольно легко модифицировать этот скрипт для обработки каждого файла по отдельности.
#!/usr/bin/awk -f
# Count punctuation marks
# See http://unix.stackexchange.com/q/239894/88378
# Written by PM 2Ring 2015.10.131
BEGIN{
FS = ""
punc = ".?!"
fmt = "%5s: .=%s, ?=%s, !=%s, all=%s\n"
}
/[.?!]+/{
#print NR, $0, NF
count[1] = count[2] = count[3] = 0
for(i=1; i<=NF; i++)
{
n = index(punc, $i)
if(n)
count[n] += 1
}
all = count[1] + count[2] + count[3]
printf fmt, NR, count[1], count[2], count[3], all
for(i=1; i<=3; i++)
total[i] += count[i]
}
END{
all = total[1] + total[2] + total[3]
printf fmt, "Total", total[1], total[2], total[3], all
}
Вот некоторые случайные данные, которые я использовал для тестирования этого скрипта:
Some test data
.a.?? .u o..ru. !!?aarl.?...t s
e.?a.eli?.?s.. ?.r. s.t .e.a.le!
ti h ..rs. ?er.t. dn!t?.?.l.?t
?.n!rer e. d..!???? a .!..a.tit.
No punctuation
!.a.n..!isda!.o a!le.d..a.!sh.t?
?!?. ..!i hi...h iii.?..a i hh?
.h r.u?....t..s !.. a .li?hs !.
ia tso???.tr?t .hl..i.aids l.?.?
Bye-bye.
А вот вывод, который получился:
2: .=10, ?=4, !=2, all=16
3: .=11, ?=4, !=1, all=16
4: .=8, ?=4, !=1, all=13
5: .=9, ?=5, !=3, all=17
7: .=10, ?=1, !=5, all=16
8: .=9, ?=4, !=2, all=15
9: .=12, ?=2, !=2, all=16
10: .=7, ?=6, !=0, all=13
11: .=1, ?=0, !=0, all=1
Total: .=77, ?=30, !=16, all=123
Проверено на GNU Awk 3.1.7
La línea
CC ?= gcc
en el Makefile significa "si la variable CC
aún no está establecida, configúrela en gcc
".
Más adelante en el Makefile, el compilador enumerado en la variable CC
se usará para compilar archivos de lenguaje C(CC
es una variable estándar para el compilador C ).
Si gcc
es el compilador que desea usar, no tiene que cambiar nada.
Si quiere usar otro compilador, como clang
o gcc-7
o algo completamente distinto, no tiene que cambiar el Makefile. En su lugar, simplemente diga
make CC=clang
en la línea de comando (donde clang
puede ser solo el nombre ejecutable del compilador, o su ruta completa si no está disponible en su propio$PATH
).
Para usarccache
(una "caché del compilador")con, p. clang
,
make CC='ccache clang'
Dado que Makefile comprueba si la variable CC
está configurada antes de configurarla en gcc
, la forma mencionada anteriormente es la mejor manera de invocar make
con un compilador diferente. Si hubiera establecido el valor de CC
incondicionalmente, habría tenido que editar el Makefile.
CC
в вашем makefile
— это просто переменная. Вы можете указать любой компилятор или исполняемый файл в вашей системе.
Найдите прямой путь к вашему "новому" gcc и включите его CC={Path}
и компиляция должна быть в порядке.