
Я пытался выяснить, как узнать, сколько значений в столбце отсутствуют, т.е. содержат только «.»
Например
автомобиль.txt
Car Colour mpg Year
vw_golf blue 56 2006
vw_polo red 66 2010
honda_civic white . 2007
ford_ka red . 2014
Итак, меня интересуют Honda Civic и Ford Ka, поскольку у них нет числа в столбце миль на галлон, и я хочу узнать, сколько значений в столбце миль на галлон не имеет значения (в данном случае 2).
Проблема, с которой я столкнулся, заключается в том, что точка выдает ошибки, когда я использую команду awk.
решение1
Короткийgrep
подход:
grep -Ec '^\S+\s+\S+\s+\.\s+' file
2
-E
- разрешить расширенные регулярные выражения-c
- вывести количество совпадающих строк\S+
- соответствует непробельным символам, является синонимом[^[:space:]]
\s+
- соответствует пробельным символам, это синоним[[:space:]]
решение2
Другой grep
метод, если ваш файл строго отформатирован так, чтобы mpg начинался со столбца 28:
$ grep '...........................\.' input
honda_civic white . 2007
ford_ka red . 2014
$ grep -c '...........................\.' input
2
Это 28 точек (для символа «любой»), за которыми следует экранированная точка («точка»).
Или с awk
,как упомянулв комментариях:
$ awk '$3 == "."' input
honda_civic white . 2007
ford_ka red . 2014
$ awk '$3 == "."' input | wc -l
2