我正在尝试在数字字符串中查找最大值,而某些数据包含尾随的9。
if (DriveApp.getFoldersByName('JobSheet' + year).hasNext() == true) {
if (DriveApp.getFoldersByName('JobSheet' + months + year).hasNext() == true) {
var folders = DriveApp.getFoldersByName('JobSheet' + months + year);
var folder = folders.next();
var file = DriveApp.getFilesByName(newSpreadsheetName).next();
folder.addfile(file);
}
}
我一直在使用以下命令来查找数字的最大值,但是,显然命令会将带有9s的数据视为“max”(例如,6399999 ....)并忽略实际的最大值值。有些数据还包含只有9个数据的错误数据。
999999999999 63 66 69 71 73 75 76 78 80 81 81 80 79 74 67 63999999999999999
如何摆脱不良数据(例如,999999)以及如何使用尾随9s(6399999 ...> 64)更正值,以便可以对数据进行舍入(和包含)设置?
答案 0 :(得分:1)
这与Adams的回答略有不同,并在循环中使用sed。
首先,我假设您不知道将包含多少9个。其次,我使用中间转换来浮动。
for line in $(cat file_temp); do
i=$(echo $line | sed 's/../.&/;t;s/^.$/.0&/');
printf "%.02f\n" $i;
done | sed 's/\.//;s/^0//' | sort -nr
故障:
sed 's/../.&/;t;s/^.$/.0&/'
在第二个字符后添加小数点
printf "%.02f\n" $i;
将值打印为浮点数 - 自动为您舍入。
sed 's/\.//;s/^0//'
剥离前导0和。只留下剩余的整数
答案 1 :(得分:1)
To" clean"数据,您可以通过循环遍历所有字段来执行以下操作:
9
s,请将其删除。9
结束,请删除它们并将剩余数字增加为一个。根据您的输入看到它的实际效果:
$ awk '{for(i=1;i<=NF;i++) {if ($i~/^9+$/) $i=""; if (sub(/9+$/,"",$i)) $i++}}1' a
63 66 7 71 73 75 76 78 80 81 81 80 8 74 67 64
中的任何算法获得最大值是微不足道的
答案 2 :(得分:0)
根据示例代码构建:
grep -Eo '[0-9]+' file_temp | awk '
$1 ~ /999999999999999/ { sub(/999999999999999$/,""); $1++}
$0 != 999999999999'
这会将每个数字放在自己的行上,然后使用awk
修改每一行。 awk
检查15 9
s的所有行并将其剥离,然后递增该数字。下一行打印的不是11个9的任何内容。
以上假设1239999999999999999
应为1240
。相反,它应该是124
:
grep -Eo '[0-9]+' file_temp | awk '
$1 ~ /^999+$/ { next }
$1 ~ /999$/ { sub(/9+$/,""); $1++}
{ print }'
第一个awk
行会跳过仅为9的行,第二行会删除所有尾随行并递增数字,第三行会打印。假设9
和99
有效,我会关注3个以上的9个。
答案 3 :(得分:0)
你可以使用这个awk:
awk -v RS=' ' '{gsub(/9+$/, ".&", $1); $1=int($1); print $1; if ($1>max) max=$1}
END{print "max = ", max}' file
0
63
66
6
71
73
75
76
78
80
81
81
80
7
74
67
64
max = 81
gsub(/9+$/, ".&", $1)
将在结束9s之前插入一个小数点。
$1=int($1)
将取十进制数的整数值,从而将它们四舍五入。
if ($1>max) max=$1
是简单的max
计算。
答案 4 :(得分:0)
我假设&#34;空格后跟2位数&#34;是提取所需数字的有效方法:
echo 999999999999 63 66 69 71 73 75 76 78 80 81 81 80 79 74 67 63999999999999999 |
grep -o ' [0-9][0-9]' |
sort -n |
tail -1
产生
81