Bash:从文本文件中的每一行中删除最低值并打印

时间:2014-02-23 00:07:20

标签: bash awk

我到处寻找它的帮助,似乎无法正常工作。我试图做的是采用带空格分隔格式的.txt文件,删除最低值,并打印出剩余的值。这是我正在谈论的一个例子。

1234567890 Joe Blow 90 92 94
2345678901 Jane Kirk 91 58 72

运行代码后,我将得到以下内容

1234567890 Joe Blow 92 94
2345678901 Jane Kirk 91 72

如果可能的话,我也希望能够使用awk语句。感谢您提前提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

这应该有效(假设您的前三个字段不进行比较):

awk '{
  min = $4
  for(i = 4; i <= NF; i++) {
    min = (min < $i) ? min : $i
  }
  for(i = 1; i <= NF; i++) {
    printf "%s", ($i == min) ? "" : $i FS
  }
  print ""
}' file

测试:

$ cat file
1234567890 Joe Blow 90 92 94
2345678901 Jane Kirk 91 58 72

$ awk '{
  min = $4
  for(i = 4; i <= NF; i++) {
    min = (min < $i) ? min : $i
  }
  for(i = 1; i <= NF; i++) {
    printf "%s", ($i == min) ? "" : $i FS
  }
  print ""
}' file
1234567890 Joe Blow 92 94
2345678901 Jane Kirk 91 72