Что-то замечательное в командной строке - это то, что вы можете легко использовать лучший инструмент для правильного приложения, объединяя выходные данные с каналами |
или создавая временные файлы, такие как newfile.txt
.
В этом случае использование sort
является подходящим выбором для сортировки ваших данных.После сортировки вы можете использовать отдельный инструмент, который очень эффективен при разборе данных, awk
.
Начиная с вашего отсортированного newfile.txt
, эта awk
операция будет печатать только строку с 5 полями (при условии, что ваши отсутствующие данные фактически отсутствуют и нет пустых разделителей, например, ваша строка выглядит как 45;c;
вместо 45;c;;;
)
awk -F';' 'NF == 5 { print }' newfile.txt
Однако в случае, когда пустые поля разделены (например, 45;c;;;
), и при условии, что только столбцы с 3 по 5 могут иметь пропущенные данные, это будет обрабатывать это:
awk -F';' 'NF == 5 && $3 && $4 && $5 { print }' newfile.txt
Обратите внимание: поскольку по умолчанию awk
используется для печати, вышеприведенное { print }
на самом деле не нужно, но включено педагогически.
Таким образом, от начала до конца вы можете получить желаемый результат с помощью
sort -t ';' -rk3 original.txt | awk 'NF==5 && $3 && $4 && $5' > result.txt