#linux #unix #awk
#linux #unix #awk
Вопрос:
У меня есть текстовый файл (назовите его infile.txt
), где столбцы имеют заголовки и разделены точками с запятой. Его подмножество воспроизводится ниже:
SCHCD; SCHNAME
13110208001; GOVT MIDSCHOOL
10110208002; GOVT HIGHSCHOOL
21110208101; MATRIC
21110208102; UPPER SECONDARY
13110208201; SECONDARY
Мне нужно подмножество файла, в котором первые два символа «SCHCD» равны «13». Итак, мое подмножество (назовите его outfile.txt
) должно выглядеть так:
SCHCD; SCHNAME
13110208001; GOVT MIDSCHOOL
13110208201; SECONDARY
Ответ №1:
С awk
:
awk ' NR == 1 || /^13/ ' infile.txt > outfile.txt
Комментарии:
1. Большое спасибо, Уэс. Работал отлично. Что, если бы «13» было во втором столбце, а не в самом начале?
2. @user702432:
awk ' NR == 1 || $2 ~ /^13/ ' infile.txt > outfile.txt
3. Да, я знаю. Если я правильно понимаю, ваш код обрабатывает infile.txt как плоский файл без каких-либо требований к разделению (что идеально подходит для моей нынешней проблемы). Я имею в виду, что, если бы мне пришлось вводить подстроку во 2-й столбец? Просто пытаюсь увеличить свою собственную базу знаний. Спасибо.
4. @user702432:
awk -F; ' NR == 1 || $2 ~ /^13/ ' infile.txt > outfile.txt
— Теперь исправлено. Для первого столбца нам не нужно учитывать разделитель.