awk - 使用 awk,提取文本文件中列中两个字符串之间的第一个和最后一个数字,然后区分它们?

标签 awk

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

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' 会导致 , 出现语法错误.

最佳答案

您可以使用这个 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

关于awk - 使用 awk,提取文本文件中列中两个字符串之间的第一个和最后一个数字,然后区分它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61001682/

相关文章:

awk - if 语句中 and 运算符的语法错误

bash - 如何通过变量传递文件名以供awk读取

linux - 转换 key :value to CSV file

awk - Awk 新手。与负数格式作斗争

perl - 根据当前文件的内容从 awk 搜索/读取另一个文件,是否可能?

linux - 如何从脚本添加/替换命令到 SSH 公钥的末尾?

Bash - 查看文件中的特定行及其相应的行号

mysql - 如何将隐含年份添加到未指定年份的字符串中?

linux - 如果第二列中的数据相同,则第一列的 Bash 添加

bash - 删除字段中的所有重复条目