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

前端之家收集整理的这篇文章主要介绍了bash – 使用sed / awk将x ^ 2添加到每个“非零”系数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须尽可能简单地编写一个必须使用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.

猜你在找的Bash相关文章