我必须尽可能简单地编写一个必须使用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.