2015-05-21 4 views
-1

У меня есть текстовый файл, который имеет данные, разделенные разделителями. Мне нужно запустить цикл, который будет проверять каждую строку и печатать номер строки, который имеет пустую запись (записи). Текстовый файл может содержать любое количество строк.
Мой текстовый файл выглядит следующим образом:Поиск пустых записей в текстовом файле

398569527JOM08021952|XIMH009|M|20150331 
398569527JOM08021952|XIMH009|M|20150331 
525230008DEF12061960|XSTAR002|M|20150331 

Так иногда это может быть, как:

525230008DEF12061960|XSTAR001|  |20150331 
525230008DEF12061960|XSTAR001|  |20150331 
          |XIMH009| | 
585485743JAM08241950|   |H|20150331 

Так что выход будет показать мне, что строка номер 1,2,3 и 4 имеет пустые записи , Может ли кто-нибудь помочь мне с некоторой идеей?

ответ

0

Вы можете использовать AWK, чтобы сделать это:

$ awk -F'|' '{for (i=1; i<=NF; ++i) if ($i ~ /^[[:space:]]*$/) {print NR, $0; next}}' file 
1 525230008DEF12061960|XSTAR001|  |20150331 
2 525230008DEF12061960|XSTAR001|  |20150331 
3       |XIMH009| | 
4 585485743JAM08241950|   |H|20150331 

Скрипт перебирает каждого поля, используя | в качестве разделителя полей. Если поле пусто или содержит только пробелы, печатается номер строки NR и содержимое строки $0. next переходит к следующей строке, чтобы избежать дублирования вывода, если имеется более одного отсутствующего поля.

Вот еще один способ, которым Вы можете сделать это, используя Grep:

$ grep -E '(^|\|)[[:space:]]*(\||$)' file 

Это соответствует началу строки или | следуют ноль или более пробелов, за которым следует | или в конце строки. Вы можете использовать переключатель -n, чтобы добавить номера строк, которые соответствуют.

+0

Спасибо Том :) ... Это сработало – saurav7777777

+0

Я рад это слышать. Не забудьте принять мой ответ, нажав на галочку рядом с ним, если ваша проблема решена. –

+0

Привет, Том .. Существует еще один файл с нижестоящим форматом: – saurav7777777

Смежные вопросы