您能帮我解决以下问题吗?
20066898701..20066901700
20066891201..20066893700
20066879201..20066888700
20009429701..20009439700
20009412201..20009414700
我有如上的输入
我需要将 .. 转换为 ,分开
然后从第 1 列中减去第 2 列,并输出加 1
20066898701..20066901700 => (20066901700-20066898701)+1 => 3000
答案1
将您的输出通过管道传输到以下 Perl 中:
perl -ne 'my @fields = split /\s/, $_; foreach my $input (@fields) { if (/^(\d+)..(\d+)$/) { print $2 - $1 + 1, "\n"; } }'
它首先会用空格分割输入(因此第一行应该可以工作)。然后,它会对每个条目运行正则表达式,以匹配仅包含两个以 .. 分隔的数字的字符串 - 括号将数字放在 $1 和 $2 中。
例如:
echo "20066898701..20066901700" | perl -ne 'my @fields = split /\s/, $_; foreach my $input (@fields) { if (/^(\d+)\.\.(\d+)$/) { print $2 - $1 + 1, "\n"; } }' 3000
答案2
sed 's/\.\./,/g'<erk|awk 'BEGIN { FS = ","}; { total = ($2 - $1) +1; print total}
给定一个名为“erk”的文件,其中包含您的数据:
tom@holborn:~$ cat erk | sed 's/\.\./,/g'| awk 'BEGIN { FS = ","}; { total = ($2 - $1) +1; print total}'
3000
2500
9500
10000
2500
您可以将应用程序的输出直接导入 sed,而不是 cat
答案3
在 Bash 中:
while IFS=. read -r field1 null field2
do
echo $((field2 - field1 + 1))
done < inputfile
答案4
在bash中:
cat file-with-numbers.txt | while read i
do
first=`echo $i | cut -f1 -d.`
second=`echo $i | cut -f3 -d.`
expr $second - $first + 1
done