2

我有一个类似于下面的文本文件。

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+last-first)提取到一个新的文本文件中,其中每个第一个、最后一个和差异都有一个列。结果应如下所示。从技术上讲,差异列可能是括号之间的数字,因为该数字始终是每个字符串之间最后一个数字和第一个数字之间的 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'导致语法错误,

4

1 回答 1

3

你可以使用这个 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
于 2020-04-02T22:12:54.883 回答