使用awk,提取文本文件中一列中两个字符串之间的第一个和最后一个数字,然后将它们区别开来?
我有一个文本文件,看起来像下面使用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 我只对第一列的第一个和最后一个数字感兴趣。我想将first、last和difference(1+last first)提取
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
我只对第一列的第一个和最后一个数字感兴趣。我想将first、last和difference(1+last first)提取到一个新的文本文件中,每个first、last和difference都有一列。结果如下所示。从技术上讲,difference列可以是括号之间的数字,因为这个数字始终是每个字符串之间最后一个数字和第一个数字之间的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
到目前为止,我只能得到模式之间的行:
cat input.txt | awk'/code/{flag=1;next}/code/{flag=0}flag'
。但我对其他列不感兴趣,对每个字符串之间第一个和最后一个数字之间的数字也不感兴趣。
5 7 3
9 10 2
12 12 1
14 15 2