2016-11-12 62 views
0

我有一个需要从它看起来像下面这样的文件分析数据的shell脚本比较各行:击:在for循环

255 48 48    exp1 
97 97 97    exas 
238 44 44    dkopkw 
194 194 194    sdkaok 

我再取数据,并将其在for语句排序。对于每一行,我需要比较数据并查看它是否小于并在数字之间打印一行。

#!/bin/bash 

    for line in "$(sort /myfile.txt -k1 -n)" 
    do 

    COL_ONE=$(print "line" | awk '{print $1}') 

    if [[ $COL_ONE -lt 90 ]]; then 
      echo "$line" 
      echo "------------------" 
    else 
      echo "$line" 
    fi 

done 

然而,当这个运行它打印的数字之间的界线。我希望我的输出如下所示:

97 97 97    exas 
------------------------------ 
194 194 194    sdkaok 
238 44 44    dkopkw 
255 48 48    exp1 

我不知道我做错了,它已经让我疯狂。

+0

每一行有四个字段,所述前三个是数字,这个问题应该指定前三个字段中的哪一个(即它们中的任何一个,它们中的一些,或全部)是否与* 90 *进行比较。 – agc

回答

0

绕过你尝试的问题,并为更强大和高效的A液:

sort -k1,1 -n myfile.txt | awk '$1 < 98 { print $0 "\n------------------"; next } 1' 

请注意,我用98而非90作为比较值,是与你的期望的输出一致。
此外,请注意,1添加到-k1以确保排序真正限于第1个字段。


至于你已经尝试过什么:

离开效率问题,在9890问题,是不明智的做法,拨出:

  • 如果双引号命令替换("$(...)")将其输出视为单个输入到for循环。

  • print不是bash命令(也可能是一个外部实用程序的名称,和"line"应以引用该变量"$line"

+1

感谢您的回答我的头发现在仍然依附在我的头上。 – liquidsword92