Используя awk, извлеките первые и последние числа между двумя строками в столбце в текстовом файле, и чем они отличаются? - PullRequest
2 голосов
/ 03 апреля 2020

У меня есть текстовый файл, похожий на приведенный ниже.

Code 1 (3)
5     10     10
6     10     10
7     10     10
Code 2 (2)
9     11     11
10     8      8
Code 3 (1)
12    10      9
Code 4 (2)
14     8     10
15     8     10

Меня интересуют только первые и последние цифры в первом столбце. Я хотел бы извлечь первое, последнее и различие (1 + последний-первый) в новый текстовый файл со столбцом для каждого первого, последнего и разницы. Результат должен выглядеть следующим образом. Технически, столбец разницы может быть числом в скобках, так как это число всегда будет разницей 1 + между последним и первым числами между каждой строкой. Обратите внимание, что последняя строка во входном текстовом файле не имеет строки под ней.

5     7     3
9    10     2
12   12     1
14   15     2

Попытка awk '/Code/{flag=1;next}/Code/{flag=0}flag' дает мне все строки и столбцы между каждой строкой. Попытка awk '$1 ~ /Code/{flag=1;next},$1 ~ 1 /Code/{flag=0}flag' приводит к синтаксической ошибке на ,.

1 Ответ

3 голосов
/ 03 апреля 2020

Вы можете использовать этот awk:

awk -v OFS='\t' '/^Code/ {
   if (NR > 1)
      print first, prev, (prev-first+1)
   first = prev = ""
   next
}
(first == "") {
   first = $1
}
{
   prev = $1
}
END {
   print first, prev, (prev-first+1)
}' file

5   7   3
9   10  2
12  12  1
14  15  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...