我有一个shell脚本需要分析文件中的数据,如下所示:
255 48 48 exp1
97 97 97 exas
238 44 44 dkopkw
194 194 194 sdkaok
然后我获取数据并在for
语句中对其进行排序。对于每一行,我需要比较数据并查看它是否小于 90 并在数字之间打印一条线。
#!/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 :(得分:0)
解决您尝试的问题并且更加强大和高效的解决方案:
sort -k1,1 -n myfile.txt | awk '$1 < 98 { print $0 "\n------------------"; next } 1'
请注意,我已使用98
而非90
作为比较值,以与您所需的输出保持一致。
另请注意,1
添加到-k1
以确保排序真正限于第1个字段。
至于你尝试过的事情:
将效率问题,98
与90
问题以及不明智的做法放在一边:
如果双引号命令替换("$(...)"
),则其输出将被视为for
的单输入循环。
for
。 print
不是Bash命令(也不可能是外部实用程序的名称,"line"
应该是"$line"
才能引用变量。