Подсчитайте количество строк в каждом столбце текстового файла.

Подсчитайте количество строк в каждом столбце текстового файла.

У меня есть текстовый файл следующего формата:

5 3 1
2 3 4
.....
.....
т.е. 3 столбца чисел, разделенных пробелом/ Однако некоторые строки могут быть такими:
2
3 1
Итак, я хочу определить, есть ли в текстовом файле такие несоответствия, и распечатать их. Как мне это сделать?

решение1

Стефан Шазелас предложил

awk 'NF != 3'

Это простой способ распечатать все строки, которые не имеют ровно три столбца. Если вы также хотите, чтобы команда возвращала статус сбоя, если такая строка найдена:

awk 'NF != 3 {print; ++bad} END {exit(!!bad)}'

Удалите print;, чтобы ничего не печатать и только сообщать о наличии таких строк через статус выхода.

Вы также можете сделать это с помощью grep:

grep -Ev '^[^ ]+ +[^ ]+ +[^ ]+$'

Если вы хотите быть более строгим и вывести все строки, которые не состоят ровно из трех столбцов, каждый из которых содержит целое число:

grep -Ev '^([0-9]+) +([0-9]+) +([0-9]+)$'

Используйте [␉ ]+вместо  +where символ табуляции, если вы хотите разрешить одну или несколько табуляций в качестве разделителей столбцов. Используйте, (␉| +)чтобы разрешить либо ровно одну табуляцию, либо последовательность пробелов.

решение2

Если вы действительно хотите получить ответ, указанный в заголовке вопроса, эта awkкоманда выведет номер строки и количество полей в каждой строке:

awk '{print NR,NF}'

решение3

awk '{if(NF != 3) print NR,NF}' file.txt

Это выведет номера строк в файле, в которых нет 3 полей, и количество полей, которые у них есть.

Связанный контент