Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 打印组中包含最少数量的行-AWK/SED/PERL_Loops_Awk_Sed_Comparison - Fatal编程技术网

Loops 打印组中包含最少数量的行-AWK/SED/PERL

Loops 打印组中包含最少数量的行-AWK/SED/PERL,loops,awk,sed,comparison,Loops,Awk,Sed,Comparison,我只想打印组中包含最少数字的行。我的文件包含多个列,我使用第一列来确定组。假设第1、第4、第6行在同一组中,因为第一列的内容是相同的。我的目标是为每组打印出第二列中包含最少数字的行 file.txt: VDDA 0.7 .... VDDB 0.2 .... VDDB 0.3 .... VDDA 0.4 .... VSS 0.1 .... VDDA 0.2 .... VSS 0.2 .... output.txt: VDDA 0.2 .... VDDB 0.2 .... VS

我只想打印组中包含最少数字的行。我的文件包含多个列,我使用第一列来确定组。假设第1、第4、第6行在同一组中,因为第一列的内容是相同的。我的目标是为每组打印出第二列中包含最少数字的行

file.txt:

VDDA 0.7  ....
VDDB 0.2  ....
VDDB 0.3   ....
VDDA 0.4  ....
VSS 0.1  ....
VDDA 0.2  ....
VSS 0.2  ....
output.txt:

VDDA 0.2  ....
VDDB 0.2  ....
VSS 0.1  ....

我想我可以使用for循环和比较来完成这项工作,但我认为使用AWK/SED/PERL有一种更好的方法。

如果您不关心输入文件中第一个字段的顺序,那么下面的内容也可能对您有所帮助。此外,这段代码将寻找任何第一个字段的最小数值,然后将其打印出来

awk '{a[$1]=a[$1]>$2?$2:(a[$1]?a[$1]:$2)} END{for(i in a){print i,a[i]}}'  Input_file
EDIT1:如果您希望输出的顺序与$1的顺序相同,那么下面的内容也可能对您有所帮助

awk '!a[$1]{b[++i]=$1} {c[$1]=a[$1]>$2?$0:(c[$1]?c[$1]:$0);a[$1]=a[$1]>$2?$2:(a[$1]?a[$1]:$2);}  END{for(j=1;j<=i;j++){print b[j],c[b[j]]}}'    Input_file

awk'!a[$1]{b[++i]=$1}{c[$1]=a[$1]>2?$0:(c[$1]?c[$1]:$0);a[$1]=a[$1]>$2?$2:(a[$1]?a[$1]:$2);}END{for(j=1;j如果您不担心输入文件中第一个字段的顺序,那么下面的代码也可能对您有所帮助。此外,该代码将查找任何第一个字段的最小数值,然后再打印出来

awk '{a[$1]=a[$1]>$2?$2:(a[$1]?a[$1]:$2)} END{for(i in a){print i,a[i]}}'  Input_file
EDIT1:如果您希望输出的顺序与$1的顺序相同,那么下面的内容也可能对您有所帮助

awk '!a[$1]{b[++i]=$1} {c[$1]=a[$1]>$2?$0:(c[$1]?c[$1]:$0);a[$1]=a[$1]>$2?$2:(a[$1]?a[$1]:$2);}  END{for(j=1;j<=i;j++){print b[j],c[b[j]]}}'    Input_file
awk'!a[$1]{b[++i]=$1}{c[$1]>2?$0:(c[$1]?c[$1]:$0);a[$1]=a[$1]>2?$2:(a[$1]?a[$1]:$2);}END{for(j=1;j使用GNU工具:

假设以下示例性输入文件包含5列行:

VDDA 0.7  c1  2  a
VDDB 0.2  c2  3  b
VDDB 0.3  c4  5  c
VDDA 0.4  c5  6  d
VSS 0.1  c6  7  e
VDDA 0.2  c7  8  f
VSS 0.2  c8  9  g

使用GNU工具:

假设以下示例性输入文件包含5列行:

VDDA 0.7  c1  2  a
VDDB 0.2  c2  3  b
VDDB 0.3  c4  5  c
VDDA 0.4  c5  6  d
VSS 0.1  c6  7  e
VDDA 0.2  c7  8  f
VSS 0.2  c8  9  g


$awk'{split(a[$1],s);a[$1]=(s[2]
$awk'{split(a[$1],s);a[$1]=(s[2]如果您不关心顺序,并且如果有
-u
可用,则可以使用
排序
轻松完成此操作(教程:)…在任何情况下,您都必须展示您的努力来解决此问题..而且
sed
绝对不可取如果您不关心顺序,并且如果
-u
可用,则可以使用
排序
轻松完成此操作(教程:)…在任何情况下,您都必须显示您为解决此问题所做的努力..而且
sed
绝对不可取谢谢您共享您的代码。我认为EDIT1可能有错误。我得到了“未找到[:事件”另外,第一个代码只生成第一列和第二列,但我想打印整行。请现在检查EDIT1,它将为您提供完整的行作为输出,然后让我知道它是如何运行的。感谢您共享您的代码。我想EDIT1可能有错误。我得到了“a[:Event not found”另外,第一个代码只生成第一列和第二列,但我想打印整行。请现在检查EDIT1,它将为您提供完整的行作为输出,然后让我知道它是如何运行的。