обработка текста только с использованием команд unix

У меня есть задача, в которой мне нужно проанализировать файлы и извлечь информацию. Я могу сделать это легко с помощью bash, но мне нужно сделать это только с помощью команд unix.

Например, у меня есть файл, подобный следующему:

 Set<tab>one<tab>two<tab>three
 Set<tab>four<tab>five<tab>six
 ENDSET

 Set<tab>four<tab>two<tab>nine
 ENDSET

 Set<tab>one<tab>one<tab>one
 Set<tab>two<tab>two<tab>two
 ENDSET

 ...

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

Опять же, это тривиальная вещь, которую можно сделать с использованием сценариев bash, но я не уверен, как это сделать только с командами unix. Я могу комбинировать команды вместе в сценарии оболочки, но, опять же, только команды unix.


person basil    schedule 22.11.2016    source источник
comment
Что вы имеете в виду под командами Unix? awk - это команда Unix? И python?   -  person mouviciel    schedule 22.11.2016
comment
Полагаю, я мог бы передать вещи через sed, awk или даже perl, поскольку это единственный способ, которым я могу это сделать, не создавая сценариев, например, баш. Я, к сожалению, просто осел на все это.   -  person basil    schedule 22.11.2016
comment
Как бы вы это сделали с помощью bash? Это почти то же самое, что использовать только команды unix.   -  person William Pursell    schedule 22.11.2016
comment
Я имею в виду запустить cat в файле, а затем проанализировать его таким образом, возможно, с использованием промежуточных файлов, но без сценариев оболочки   -  person basil    schedule 22.11.2016
comment
Понятия не имею, чего ты хочешь. Есть ли желаемый результат, которого вы хотите достичь?   -  person glenn jackman    schedule 22.11.2016


Ответы (1)


Без выходного примера сложно определить вашу цель, но в любом случае одна команда UNIX, которую вы можете использовать, - это AWK.

Примеры:

Извлеките 2 набора из образца данных (без указания "ENDSET" и пустых строк):

$ awk '/ENDSET/{ if(++count==2) exit(0);next; }NF{print}' file.txt
Set     one     two     three
Set     four    five    six
Set     four    two     nine

Извлеките 3 набора и распечатайте только 2-й столбец (обратите внимание, что 1-й столбец всегда имеет значение «Set»):

$ awk '/ENDSET/{ if(++count==3) exit(0);next; }$2{print $2}' file.txt
two
five
two
one
two

И так далее ... (подробнее: $ man awk)

person WPomier    schedule 23.11.2016