LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 725|回复: 4

这个问题能用shell解决吗?

[复制链接]
发表于 2004-11-27 02:12:55 | 显示全部楼层 |阅读模式
是关于数列变化的。不知道能不能用shell实现
比方说有一个数列存在文件a1.txt中,格式如下

a=1


b=001
1.0000 4.0000 5.0000 3.0000
1.2400 5.5010 2.2130 3.0000
4.2410 1.4245 24.333 10.000
4.2341 1.5278 63.432 10.000
6.2345 5.7654 14.533 10.000
先假设有5行

我想把它按照如下格式转换
1把b=0.01以上的全部删除
2去掉最后一列
3去掉第一,二行,第2列的数字
4剩下的三行,把他们的第3列和第2列的位置变换。

最后做出的文件如下
c=0.141241254
firstnumber  2
fdata1 1.0000 5.0000
fdata2 1.2400 2.2130
secondnumber 3
sdata1 4.2410 24.333 1.4245
sdata2 4.2341 63.432 1.5278
sdata3 6.2345 14.533 5.7654

请教各位了
发表于 2004-11-27 08:52:40 | 显示全部楼层
刚学SHELL,AWK,试一个比较笨的方法。

awk '
{
if (NR>4&&NR<=6)
print $3,$1
if (NR>6)
print $1,$2,$3}' $*
 楼主| 发表于 2004-11-28 00:20:21 | 显示全部楼层
这都是什么意思啊,能解释一下吗?
发表于 2004-11-29 13:05:13 | 显示全部楼层
其实这属于awk的简单应用例子。

  1. ibox ~ # awk -v total=$(awk 'END{print NR}' tmpfile) '{if(/^b=001$/)flag=1;if(flag==1)if(cnt++<=2)print $1,$3;else if(NR>=total-2)print $1,$3,$2}' tmpfile
  2. b=001
  3. 1.0000 5.0000
  4. 1.2400 2.2130
  5. 4.2410 24.333 1.4245
  6. 4.2341 63.432 1.5278
  7. 6.2345 14.533 5.7654
复制代码
 楼主| 发表于 2004-12-8 00:28:34 | 显示全部楼层

sorry,前一阵弄错命令了。

不过如果原文件里没有b=001这行命令,取而代之的是“0“的时候该怎么办呢?

是否该把b=001改为0呢?
awk -v total=$(awk 'END{print NR}' tmpfile) '{if(/^b=001$/)flag=1;if(flag==1)if(cnt++<=2)print $1,$3;else if(NR>=total-2)print $1,$3,$2}' tmpfile
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表