Подсчитайте количество строк на столбец в Bash Shell - PullRequest
1 голос
/ 19 сентября 2019

Я новичок в Bash Shell и не могу найти полезных ресурсов в Интернете (может быть, кто-то может предложить некоторые ресурсы для меня).Я работаю над CSV-файлом, и я хотел бы знать, как получить количество строк на столбец без нуля.

Я знаю, что мы используем этот код для подсчета количества строк в файле.Но что, если я хочу указать столбец?

cat FILE_NAME | wc -l

Например, у меня есть файл CSV ниже

ID   Name
------------
13    Sara
22    Suzan
null  Mark
49    John

Я хотел бы подсчитать для IDстолбец для возврата 3.

Спасибо,

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

В мире bash столбцы - это то, что вы делаете их, обычно через установку чего-то с именем field separator (delimiter).В экосистеме есть некоторый беспорядок.Обычно разделителем является только один символ, часто <tab> по умолчанию (cut, paste, ...).Но, например, sort и awk используют целую полосу пробелов в качестве одного разделителя, если вы не установите его вручную (но вы можете установить только один символ, если вы хотите <tab>, используйте, например, awk -F$'\t').

Если ваши данные выглядят так же, как в вашем вопросе - то есть они имеют столбцы фиксированной ширины - вам лучше использовать awk, если только в одном из столбцов нет пустого поля (awk '{print $1}').Другой вариант синтаксического анализа формата с фиксированной шириной - например, cut -c1-4 (из каждой строки выведите символы от 1 до 4, которые будут вашим идентификатором).

Затем подсчитайте ненулевые значения.Сначала вы хотите пропустить заголовок, то есть tail -n +3 в вашем случае, и ваше «пустое» поле соответствует строке, поэтому рекомендуется grep (grep -v -c 'null').

Вы можете протестировать свой конвейерпо частям, удалив его сзади (и добавив head).

<input tail -n +3 |
  cut -c1-4 |
  grep -v -c 'null'
0 голосов
/ 19 сентября 2019

Исходя из предположения о необходимом выходе, вы дали

$ cat testfile 
ID   Name
------------
13    Sara
22    Suzan
null  Mark
49    John

$ awk '$1 ~ /^[0-9]*$/{ count++ }END{print count}' testfile 
3

$ awk 'function is_num(x){return(x==x+0);} is_num($1){ count++ }END{print count}' testfile 
3
0 голосов
/ 19 сентября 2019

Вы можете использовать grep, cut или awk, как предлагалось ранее. Основная идея состоит в том, чтобы подсчитать нулевые значения столбца, а затем вычесть из числа строк количество подсчитанных вами нулевых значений,чтобы узнать без нулевых значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...