交替+和 - 总和

时间:2015-01-05 14:58:57

标签: shell alternating

我正在寻找一种方法来交替+和 - 在一串由atses分开的数字中。 我需要它是Number1 - Number2 + Number3 - Number4等 它必须是一个命令行命令(希望有意义o_0),我需要能够将巨额数据输入其中。所以最好的是sed命令。谢谢!

我的命令行如下:

cat oneven.txt | sed 's/\(\w\)/4\/\1/g' | bc -l | sed 's/^\(.*\)$/\1 +/g' |sed 's/\(\w.*\w\)+\(\w.*\w\)/\1-\2/g'| tr "\n" " " | cut -c -11998

Oneven ==>不均匀(它包含所有数字,直到1000(你猜对了)不均匀。

尝试:一个sed命令,它将获取一对数字并将它们之间的+更改为min。没有结果。没有添加任何弊端 示例(交替前):

  

4.00000000000000000000 + 1.33333333333333333333 + 0.80000000000000000000 + 0.57142857142857142857 + 0.44444444444444444444 + 0.28571428571428571428 + 0.09523809523809523809 + 0.05714285714285714285 + 0.04081632653061224489 + 0.03174603174603174603 + 0.16666666666666666666 + 0.05555555555555555555 + 0.03333333333333333333 + 0.02380952380952380952 + 0.01851851851851851851 + 0.11764705882352941176 +。 03921568627450980392 + 0.02352941176470588235 + 0.01680672268907563025 + 0.01307189542483660130 + 0.09090909090909090909 + 0.03030303030303030303 + 0.01818181818181818181 + 0.01298701298701298701 + 0.01010101010101010101 + 0.07407407407407407407 + 0.02469135802469135802 + 0.01481481481481481481 + 0.01058201058201058201 + 0.00823045267489711934 + 0.06250000000000000000 + 0.02083333333333333333 + 0.01250000000000000000 + [...]

我需要它是Number1 - Number2 + Number3 - Number4等 它必须是一个命令行命令(希望有意义o_0),我需要能够将巨额数据输入其中。

1 个答案:

答案 0 :(得分:1)

如果您的输入在一行,那么您不需要tr命令。如果不是,那么tr应该在sed之前,因为sed分别处理每一行,如果数字对是,则解决方案不起作用在不同的路线上。

至于解决方案本身,你想要在它们之间加一对加号的数字是好的,但你没有为此指定一个足够好的正则表达式,所以它没有用。这是我的:

sed -e 's/\([^-+]\+\)+\([^-+]\+\)/\1-\2/g'

这说:

  • 非空字符串,既不是+也不是-
  • 后跟+
  • 后跟另一个这样的字符串。

你的正则表达式(\(\w.*\w\)+\(\w.*\w\))是错误的,因为它实际上意味着:

  • 单词字符
  • 零个或多个不受约束的字符
  • 另一个字符
  • +
  • 单词字符
  • 零个或多个不受约束的字符
  • 另一个字符

为什么这是错的?因为你的加号实际上不是由单词字符包围,而是由空格包围。因此,这实际上并不匹配线上的任何内容。

即使你考虑空格,这仍然与你的实际数字不匹配,因为它们中的一些以小数点开头,而不是单词字符。

即使你修正了它,.*也会匹配加号,这意味着如果它贪婪,它可能只会取代最后一个加号。