У меня есть большой набор данных с 586696 строк и 40 столбцов. Однако меня интересуют только некоторые из этих столбцов. В нем есть имена, а у других есть номера.Регулярное выражение как разделитель полей в awk
Мне очень трудно иметь дело с разделителями полей в этом файле. Все разделители столбцов - это пробелы. Если вы полагаете, что мой файл называется test.txt
и имеет 5 человек в нем, это выглядит следующим образом:
Name Salary
FirstName01 LastName01 Salary01
FirstName02 MiddleName02 LastName02 Salary02
FirstName03 MiddleName03 LastName03 Salary03
FirstName04 LastName04 Salary04
FirstName05 MiddleName05 LastName05 Salary05
Следовательно, если я бегу
awk '{print $1 " " $2}' test.txt
результат
Name Salary
FirstName01 LastName01
FirstName02 MiddleName02
FirstName03 MiddleName03
FirstName04 LastName04
FirstName05 MiddleName05
, но я хочу, чтобы это было
Name Salary
FirstName01 LastName01 Salary01
FirstName02 MiddleName02 LastName02 Salary02
FirstName03 MiddleName03 LastName03 Salary03
FirstName04 LastName04 Salary04
FirstName05 MiddleName05 LastName05 Salary05
Для решения этой проблемы предположим, что перед столбцом Name
имеются столбцы и столбцы Salary
.
Как я могу решить свою проблему? Думаю, мне нужно использовать какое-то регулярное выражение в качестве разделителя полей для использования awk здесь, но я не мог найти способ сделать это.
Редактировать: Я думаю, что я не был чист в исходном посте. Я знаю, что awk дает мне именно то, что я прошу. Моя проблема заключается в том, что мой полный набор данных что-то вроде
Column01 Column02 Column03 Name Salary Column06 ...
Text0101 Text0102 Text0103 FirstName01 LastName01 Salary01 ...
Text0201 Text0202 Text0203 FirstName02 MiddleName02 LastName02 Salary02 ...
Text0301 Text0302 Text0303 FirstName03 MiddleName03 LastName03 Salary03 ...
Text0401 Text0402 Text0403 FirstName04 LastName04 Salary04 ...
Text0501 Text0502 Text0503 FirstName05 MiddleName05 LastName05 Salary05 ...
Учитывая выше таблицы, я хочу код AWK, который может произвести следующий результат:
Name Salary
FirstName01 LastName01 Salary01
FirstName02 MiddleName02 LastName02 Salary02
FirstName03 MiddleName03 LastName03 Salary03
FirstName04 LastName04 Salary04
FirstName05 MiddleName05 LastName05 Salary05
Sorry о моем недостоверной вопрос.
AWK является делая то, что вы сказали ему, я t разбивается на пространство (по умолчанию), затем печатает слово 1, разделенное пробелом, затем слово2. Почему вы хотите воспроизвести результат? По крайней мере, я не вижу разницы во вводе и выходе, и awk, который вы пытаетесь сделать, кажется излишним. – melwil
Как вы хотите отличаться от оригинала? – 123
Вам нужно сохранить пустую строку в столбце среднего имени, если нет среднего имени, так что вы можете однозначно указать, в каком столбце содержится фамилия. – chepner