Bash 从awk中的多个特定列中减去单个最大数
我有一个逗号分隔的文件Bash 从awk中的多个特定列中减去单个最大数,bash,unix,awk,min,Bash,Unix,Awk,Min,我有一个逗号分隔的文件 R,F,TE,K,G,R 1,0,12,f,1,18 2,1,17,t, ,17 3,1, , ,1, 4,0,15, ,0,16 有些项目丢失了,而且第一行是我想忽略的标题。我想计算特定列中的第二个最小值,并从该列中的所有元素中减去它,除非该列中的值是最小值。在本例中,我想从示例中的第3列和第6列中减去第二个最小值。因此,我的最终价值观是: R,F,TE,K,G,R 1,0,12,f,1,1 2,1, 2,t, ,0 3,1, , ,0, 4,0, 0, ,0,16
R,F,TE,K,G,R
1,0,12,f,1,18
2,1,17,t, ,17
3,1, , ,1,
4,0,15, ,0,16
有些项目丢失了,而且第一行是我想忽略的标题。我想计算特定列中的第二个最小值,并从该列中的所有元素中减去它,除非该列中的值是最小值。在本例中,我想从示例中的第3列和第6列中减去第二个最小值。因此,我的最终价值观是:
R,F,TE,K,G,R
1,0,12,f,1,1
2,1, 2,t, ,0
3,1, , ,0,
4,0, 0, ,0,16
我尝试单独使用单列,并给出手动编码的阈值,使其在
awk 'BEGIN {FS=OFS=",";
};
{ min=1000000;
if($3<min && $3 != "" && $3>12) min = $3;
if($3>0) $3 = $3-min+1;
print}
END{print min}
' try1.txt
awk'BEGIN{FS=OFS=“,”;
};
{min=1000000;
如果(312美元)最小值=3美元;
如果($3>0)$3=$3分钟+1;
打印}
结束{print min}
'try1.txt
它可以找到最小值,但输出不符合预期。在awk中应该有一种更简单的方法 开始{
BEGIN{
FS=OFS=","
}
{
if(NR==1){print;next}
if(+$3)a[NR]=$3
if(+$6)b[NR]=$6
s[NR]=$0
}
END{
asort(a,c)
asort(b,d)
for(i=2;i<=NR;i++){
split(s[i],t)
if(t[3]!=c[1]&&+t[3]!=0)t[3]=t[3]-c[2]
if(t[6]!=d[1]&&+t[6]!=0)t[6]=t[6]-d[2]
print t[1],t[2],t[3],t[4],t[5],t[6]
}
}
FS=OFS=“,”
}
{
如果(NR==1){print;next}
如果(+$3)a[NR]=3美元
如果(+$6)b[NR]=$6
s[NR]=$0
}
结束{
asort(a,c)
阿索尔(b,d)
对于(i=2;iBEGIN{
FS=OFS=“,”
}
{
如果(NR==1){print;next}
如果(+$3)a[NR]=3美元
如果(+$6)b[NR]=$6
s[NR]=$0
}
结束{
asort(a,c)
阿索尔(b,d)
对于(i=2;iBEGIN{
FS=OFS=“,”
}
{
如果(NR==1){print;next}
如果(+$3)a[NR]=3美元
如果(+$6)b[NR]=$6
s[NR]=$0
}
结束{
asort(a,c)
阿索尔(b,d)
对于(i=2;iBEGIN{
FS=OFS=“,”
}
{
如果(NR==1){print;next}
如果(+$3)a[NR]=3美元
如果(+$6)b[NR]=$6
s[NR]=$0
}
结束{
asort(a,c)
阿索尔(b,d)
对于(i=2;i我会在文件上循环两次,一次找到最小值,一次调整值。这是时间与内存的折衷
awk -F, -v OFS=, '
NR == 1 {min3 = $3; min6 = $6}
NR == FNR {if ($3 < min3) min3 = $3; if ($6 < min6) min6 = $6; next}
$3 != min3 {$3 -= min3}
$6 != min6 {$6 -= min6}
{print}
' try1.txt try1.txt
我会在文件上循环两次,一次找到最小值,一次调整值。这是时间和内存的折衷
awk -F, -v OFS=, '
NR == 1 {min3 = $3; min6 = $6}
NR == FNR {if ($3 < min3) min3 = $3; if ($6 < min6) min6 = $6; next}
$3 != min3 {$3 -= min3}
$6 != min6 {$6 -= min6}
{print}
' try1.txt try1.txt
我会在文件上循环两次,一次找到最小值,一次调整值。这是时间和内存的折衷
awk -F, -v OFS=, '
NR == 1 {min3 = $3; min6 = $6}
NR == FNR {if ($3 < min3) min3 = $3; if ($6 < min6) min6 = $6; next}
$3 != min3 {$3 -= min3}
$6 != min6 {$6 -= min6}
{print}
' try1.txt try1.txt
我会在文件上循环两次,一次找到最小值,一次调整值。这是时间和内存的折衷
awk -F, -v OFS=, '
NR == 1 {min3 = $3; min6 = $6}
NR == FNR {if ($3 < min3) min3 = $3; if ($6 < min6) min6 = $6; next}
$3 != min3 {$3 -= min3}
$6 != min6 {$6 -= min6}
{print}
' try1.txt try1.txt
谢谢!我已向上投票。但是,当某些值丢失时,这似乎不起作用。我已相应地更新了问题。很抱歉,没有提前询问它!谢谢!我已向上投票。但当某些值丢失时,这似乎不起作用。我已相应地更新了问题。很抱歉,没有提前询问它!谢谢!我已向上投票。但这当某些值丢失时似乎不起作用。我已相应地更新了问题。很抱歉,没有提前询问它!谢谢!我已提前投票。但当某些值丢失时,这似乎不起作用。我已相应地更新了问题。很抱歉,没有提前询问它!谢谢!但是,我想减去第二个最小值,不是最小的。而且,当缺少一些值时,它不起作用。我已相应地更新了问题。再次测试?@LoveDynaSty由于您正在检查零,所以当有零时它不起作用。这些情况下有什么解决方法吗?谢谢!但是,我想减去第二个最小值,而不是最小值。另外,它是d当缺少一些值时,oes不起作用。我已相应地更新了问题。是否再次测试?@LoveDynaSty由于您正在检查零,所以当有零时,它不起作用。这些情况下有任何解决方法吗?谢谢!但是,我想减去第二个最小值,而不是最小值。此外,当有零时,它也不起作用缺少值。我已相应地更新了问题。是否再次测试?@LoveDynaSty由于您正在检查零,因此当存在零时,它不起作用。这些情况下有任何解决方法吗?谢谢!但是,我想减去第二个最小值,而不是最小值。此外,当某些值缺少时,它也不起作用。我已更新了e问相应的问题。再次测试?@LoveDynaSty由于您正在检查零,所以当有零时,它不起作用。这些情况下有什么解决方法吗?您想从每个值中减去第二小的数字,除非该值是最小的,对吗?您想从每个值中减去第二小的数字,除非该值是最小的st,对吗?你想从每个值中减去第二小的数字,除非值是最小的,对吗?你想从每个值中减去第二小的数字,除非值是最小的,对吗?