加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 使用sed / awk将x ^ 2添加到每个“非零”系数

发布时间:2020-12-16 01:09:01 所属栏目:安全 来源:网络整理
导读:我必须尽可能简单地编写一个必须使用awk或/和sed的脚本或命令. 输入文件: 23 12 0 333 4 19 第1行n = 3 第2行n = 2 在每行文件中,我们都有一串数字.每个数字都是系数,我们必须添加x ^ n,其中n是最高功率(每行中数字之间的空格之和(每行中最后一个数字之后没
我必须尽可能简单地编写一个必须使用awk或/和sed的脚本或命令.
输入文件:
23 12 0 33
3 4 19

第1行n = 3
第2行n = 2
在每行文件中,我们都有一串数字.每个数字都是系数,我们必须添加x ^ n,其中n是最高功率(每行中数字之间的空格之和(每行中最后一个数字之后没有空格))如果我们的字符串中有“0”,我们有跳过它.
所以对于那个输入,我们将输出如下:

23x^3+12x^2+33
3x^2+4x+19

请帮我写一个解决这个问题的简短脚本.非常感谢您的时间和所有帮助:)
我的想法:

linescount=$(cat numbers|wc -l)
linecounter=1
While[linecounter<=linescount];
do
i=0
for i in spaces=$(cat numbers|sed 1p | sed " " )
do
sed -i 's/ /x^spaces/g'
i=($(i=i-1))
done
linecounter=($(linecounter=linecounter-1))
done
以下awk也可以帮助你.
awk '{for(i=1;i<=NF;i++){if($i!="" && $i){val=(val?val "+" $i:$i)(NF-i==0?"":(NF-i==1?"x":"x^"NF-i))} else {pointer++}};if(val){print val};val=""} pointer==NF{print;} {pointer=""}'  Input_file

此处也添加非单线形式的解决方案.

awk '
{
  for(i=1;i<=NF;i++){
    if($i!="" && $i){
       val=(val?val "+" $i:$i)(NF-i==0?"":(NF-i==1?"x":"x^"NF-i))}
    else            {
       pointer++}};
    if(val)         {
       print val};
  val=""
}
pointer==NF         {
  print}
{
  pointer=""
}
'  Input_file

编辑:这里也添加了解释,以便更好地理解OP和所有人在这里的学习.

awk '
{
  for(i=1;i<=NF;i++){                                              ##Starting a for loop from variable 1 to till the value of NF here.
    if($i!="" && $i){                                              ##checking if variable i value is NOT NULL then do following.
       val=(val?val "+" $i:$i)(NF-i==0?"":(NF-i==1?"x":"x^"NF-i))} ##creating variable val here and putting conditions here if val is NULL then
                                                                   ##simply take value of that field else concatenate the value of val with its
                                                                   ##last value. Second condition is to check if last field of line is there then
                                                                   ##keep it like that else it is second last then print "x" along with it else keep
                                                                   ##that "x^" field_number-1 with it.
    else            {                                              ##If a field is NULL in current line then come here.
       pointer++}};                                                ##Increment the value of variable named pointer here with 1 each time it comes here.
    if(val)         {                                              ##checking if variable named val is NOT NULL here then do following.
       print val};                                                 ##Print the value of variable val here.
  val=""                                                           ##Nullifying the variable val here.
}
pointer==NF         {                                              ##checking condition if pointer value is same as NF then do following.
  print}                                                           ##Print the current line then,seems whole line is having zeros in it.
{
  pointer=""                                                       ##Nullifying the value of pointer here.
}
' Input_file                                                       ##Mentioning Input_file name here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读