У меня есть несколько файлов tsv, и я хочу проверить, что каждый файл правильно отформатирован. Прежде всего, я хочу проверить, что каждая строка имеет правильное количество столбцов. Есть ли способ сделать это? Мне бы понравилось решение командной строки, если оно есть.проверка того, что строки в файле имеют одинаковое количество столбцов
ответ
awk '{print NF}' test | sort -nu | head -n 1
Это дает вам самое низкое число столбцов в файле в любой строке.
awk '{print NF}' test | sort -nu | tail -n 1
Это дает вам наибольшее количество столбцов в файле в любой строке. Результат должен быть таким же, если присутствуют все столбцы.
Примечание: это дает мне ошибку на OS X, но не на Debian ... возможно, используется gawk
.
(я предполагаю, что «ЦВ», вы имеете в виду файл, столбцы разделены символами табуляции.)
Вы можете сделать это просто с AWK, до тех пор, пока файл не процитировали поля, содержащие символы табуляции.
Если вы знаете, сколько столбцов вы ожидаете, следующие будут работать:
awk -F '\t' -v NCOLS=42 'NF!=NCOLS{printf "Wrong number of columns at line %d\n", NR}'
(Конечно, вы должны изменить 42
правильное значение.)
Можно также автоматически выбрать до количества столбцов из первой строки:
awk -F '\t' 'NR==1{NCOLS=NF};NF!=NCOLS{printf "Wrong number of columns at line %d\n", NR}'
Это будет работать (с большим количеством шума), если первая строка содержит неверное число столбцов, но не сможет обнаружить файл, где все линии имеют одинаковое количество столбцов. Таким образом, вам, вероятно, будет лучше с первой версией, которая заставит вас указать количество столбцов.
awk
является хорошим кандидатом на это. Если столбцы разделяются табуляцией (я думаю, это то, что tsv
значит), и если вы знаете, сколько из них вы должны иметь, скажем, 17, вы можете попробовать:
awk -F'\t' 'NF != 17 {print}' file.tsv
Это будет печатать все строки в file.tsv
что не имеет точно разделенных 17 разделов. Если мое предположение неверно, отредактируйте свой вопрос и добавьте недостающую информацию (разделители столбцов, количество столбцов ...). Обратите внимание, что формат tsv
(и csv
) сложнее, чем кажется. Поля могут содержать разделитель полей, записи могут охватывать несколько строк ... Если это ваш случай, не пытайтесь изобретать колесо и использовать существующий парсер tsv
.
Просто очистки @snd ответ выше:
number_uniq_row_lengths=`awk '{print NF}' $pclFile | sort -nu | wc -l`
if [ $number_uniq_row_lengths -eq 1 ] 2>/dev/null; then
echo "$pclFile is clean"
fi
Добавление этого здесь, потому что эти ответы были близки, но не совсем работа для меня, в моем случае, мне нужно, чтобы указать разделитель полей для AWK.
Следующее должно возвращаться с одной строкой, содержащей число столбцов (если каждая строка имеет одинаковое количество столбцов).
$ awk -F'\t' '{print NF}' test.tsv | sort -nu
8
- -F используется для указания разделитель полей для AWK
- NF это число полей
- -nu заказов граф поля для каждой строки численно и возвращает только уникальные,
Если вы получили больше одной строки, то есть несколько строк вашего .tsv с большим количеством столбцов, чем другие.
Чтобы проверить правильность форматирования .tsv с каждой строкой с одинаковым количеством полей, следующее должно возвращать 1 (как прокомментировано kmace на принятом ответе), однако мне нужно было добавить -F '\ t'
$ awk -F'\t' '{print NF}' test.tsv | sort -nu | wc -l
- 1. Сравните, если строки имеют одинаковое количество цифр
- 2. Обеспечение того, что разные конструкторы имеют одинаковое поведение в Java
- 3. Убедитесь, что CSV-файл имеет одинаковое количество столбцов для каждой строки в bash.
- 4. Юникс - количество столбцов в файле
- 5. Что такое «обе стороны отношения должны иметь одинаковое количество столбцов»?
- 6. строки группы, которые имеют одинаковое эквивалентное значение
- 7. Получить строки, где столбцы имеют одинаковое значение
- 8. Mysql count количество строк, которые имеют одинаковое значение
- 9. удалить строки sql, которые имеют одинаковое значение в следующей строке
- 10. Как проверить количество столбцов для каждой строки в файле csv?
- 11. Mysql - Заказ строк, которые имеют одинаковое содержание столбцов
- 12. Сохраняя одинаковое количество столбцов в поперечном закладке отчета
- 13. Javascript, если символы в строке имеют одинаковое количество записей
- 14. Проверка того, что два класса jar одинаковы
- 15. Оба имеют одинаковое значение?
- 16. Проверка того, что считыватель данных возвращает строки
- 17. Проверка того, что строки одинаковы C++
- 18. Ненавязчивая проверка, когда несколько элементов управления имеют одинаковое имя
- 19. mysql search, где 3 столбца для строки имеют одинаковое значение
- 20. Как выбрать, сколько столбцов имеют одинаковое значение из MySQL
- 21. ASP.NET маршрутизации, где два действия контроллера имеют одинаковое количество параметров
- 22. Когда записи CSV * не * имеют одинаковое количество полей?
- 23. Проверка Java Если два JTextField имеют одинаковое содержимое
- 24. Используемые ЗЕЬЕСТ имеют разное количество столбцов
- 25. Найти количество столбцов в файле csv
- 26. Ключи имеют одинаковое значение в массиве
- 27. Codeigniter, Используемые ЗЕЬЕСТ имеют разное количество столбцов
- 28. Проверка на переменное количество столбцов в Spark
- 29. Как проверить, что два свойства в объекте имеют одинаковое значение
- 30. Объединить строки, которые имеют одинаковое значение в двух столбцах R
Мне это нравится, мне нужно было очень близко к этому: – kmace
awk '{print NF}' test | sort -nu | wc -l и убедитесь, что он равен 1 – kmace