2016-10-21 2 views
-3

Привет Я использую командную строку оболочки и пытаюсь извлечь первый столбец курса и столбец класса из файла.Использование регулярных выражений, извлечение данных

Я использую

cat data.txt | cut -d ' ' -f 1,2 

К этому коду Я также получаю (0), Student Id и некоторые другие индексы в моем выходе, который мне не нужен. Как я могу получить только 3-4 буквенных слова из этого столбца, так как я считаю, что это должно быть сделано. Heres входной файл

          ATT ERN CrGPA Qpts 
              --- --- ----- ---- 
    *  Student Id - 
       (0) UNIV OF SOME COOL PLACE 
      BIOL 310 GENERAL BIOLOGY BIOS 101 W  3.00 0.00     0.00 0.00 20081 
      CIBI 300 FUND OF BIOL I BIOS 110 B  3.00 3.00 3.00 9.00 20072 
      CIBI 300 FUND OF BIOL II BIOS 120 D  3.00 3.00 3.00 3.00 20082 
      CIBI 300 FUND OF BIOL II BIOS 120 W  3.00 0.00 0.00 0.00 20102 
      QUIM 300 GEN CHEMISTRY I CHEM 121 F  3.00 0.00 3.00 0.00 20091 
      QUIM 300 GEN CHEMISTRY I CHEM 121L F  1.00 0.00 1.00 0.00 20091 
      CSC 303 FUNDMTL STRUCTU CSC100+ F  3.00 0.00 3.00 0.00 20091 

результат должен быть

BIOL 310  W 
    CIBI 300  B 
    CIBI 300  D 
    CIBI 300  W 
    So on.. 

Примечание CSC в колонке 1 является 3 буквы

+1

Как выглядит входной файл? –

+0

@maria Эта информация должна заходить в вопрос, а не в комментарий. Просто отредактируйте вопрос. –

+0

ОК извините, что – maria

ответ

0

Похоже, ваш ввод данных состоит из фиксированной ширины столбцов, что означает, что вам необходимо разместить свое решение на столбец (знак), а не поля, выделенные разделителями:

$ tail +5 data.txt | cut -c 12-15,16-20,47-48 

BIOL 310 W 
CIBI 300 B 
CIBI 300 D 
CIBI 300 W 
QUIM 300 F 
QUIM 300 F 
CCOM 303 F 
  • tail +5 пропускает строки заголовка
  • cut -c 12-15,16-20,47-48 определяет строки для извлечения в виде списка диапазонов столбцов положение; в случае 2-го и 3-го выходных полей это включает пробельный символ, предшествующий полю.

Оригинальный ответ, до того были уточнены требования:

В случае, если вы просто хотите, чтобы игнорировать строки заголовка, простое исправление будет:

awk 'NF >= 11 { print $1, $2 }' data.txt 

Похоже, все строки данных имеют (по крайней мере) 11 полей, поэтому NF >= 11 гарантирует, что обрабатываются только строки данных, а print $1, $2 просто печатает первые 2 поля, разделенные пробелами, разделенные awk. разделитель вывода по умолчанию (OFS), который является пространством.

0
awk 'NR>4{print $1,$2"\t",$(NF-5)}' file 

BIOL 310  W 
CIBI 300  B 
CIBI 300  D 
CIBI 300  W 
QUIM 300  F 
QUIM 300  F 
CCOM 303  F 
+0

Хотя этот код может помочь решить проблему, он не объясняет _why_ и/или _how_, он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшит его долгосрочную образовательную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, включая ограничения и допущения. –

+0

Можете ли вы также сказать, как я могу отменить W и F от 5-го colummn – maria

+0

Я просто хочу отображать ABCD, а не WF – maria

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