У меня есть данныеAWK Различные проверки на другой линии Начало
с
90|1234|10:50|Y
91|1234|JOHN|[email protected]|alert
92|1234|Student|MIB Alerts
Примечание: $ 2 является ключевой ценностью & он имеет какое-то значение в следующей логике
Я хочу сделать другую проверку
for line starting with 90, NF=4, $2 Numeric, $3 Time, $4 Y/N
for line starting with 91, NF=5, $2 Non Empty, $3 Email ID
for line starting with 92, NF=4, $2 Numeric
В итоге я разделил файлы в соответствии с 90, 91 & 92 значения $ 1 старт
с использованием
grep "^90" filename | awk -F '|' 'NF == 4 && $2 ~ /^[0-9]*$/ && $3 ~ /^[0-9]{2}:[0-9]{2} $/ && $4 ~/^[YN]$/' >> file90.txt
grep "^91" filename | awk -F '|' 'NF == 5 && $2 ~ /^[0-9]*$/ && !length($3) && $4 ~ /^[[:alnum:]_.][email protected][[:alnum:]_]+[.][[:alnum:]]+$/' >> file91.txt
grep "^92" filename | awk -F '|' 'NF == 4 && $2 ~ /^[0-9]*$/' >> file92.txt
затем
cat file92.txt >> file91.txt
cat file91.txt >> file90.txt
С некоторыми изменениями эта модель работает для меня, но она имеет 2 недостатка:
- Это изменяет файл как 90 остается сверху, а затем 91, а затем 92 [В записи входящих файлов могут входить любые шаблоны, 91 может наступить]
- несколько файлов, Разделяет & присоединиться
- Я чувствую, я использую Grep понапрасну
Может кто-то поможет мне в этом в одном сценарии AWK или заявление
Добавить '$ 1 ==" 90 "' к первому условию, $ 1 == "91" ко второй и т. Д. – Barmar
вы скажете if ($ 1 == "90") {...} else if ($ 1 == "91") {...} – Ashish
и завернуть все ваши тесты в 1 awk-программу. Удачи. – shellter