LinuxSir.cn,穿越时空的Linuxsir!

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

有没有提取文本文件中特定字符(串)所在行号的命令???

[复制链接]
发表于 2006-12-21 13:39:43 | 显示全部楼层 |阅读模式
我有一大批这样的文本文件,需要做如标题所说的操作,亟待高人指点解围!!!
  先行谢过!!!

谢谢大家的热心帮助,呵呵 ,是有点笼统 ,我再补充一下。
谢谢各位啦,我是为了解决下边的问题,才提出这个问题的 ,我认为只要能提出行号,利用sed ,grep结合循环应该能解决我的问题。当然,我这种思路是不是太笨啦,大家是不是有更好的思路和方法?不妨再看看下面的问题 恭请再赐教一二???
我想从很多类似的文本文件中提取出如下一部分并统一保存到另一个文本文件中,被提出的这部分类似如下:
============================
Summary of elastic constants
============================

id i j Cij (GPa)
1 1 1 406.91480 +/- 3.489
4 4 4 306.82818 +/- 0.139
7 1 2 165.18034 +/- 0.581

但这部分类似内容在各个文本中所处的位置不同,也就是说,在1这个文本中它所初的位置是10-15行,而在2文本中它就可能处在12-17行。
这些东东用脚本提取出来,不知到脚本如何编写?


各文本原文件内容类似如下:
C (gradient) : 306.828179
Error on C : 0.138882
Correlation coeff: 0.999999
Stress intercept : 0.000537


============================
Summary of elastic constants
============================

id i j Cij (GPa)
1 1 1 406.91480 +/- 3.489
4 4 4 306.82818 +/- 0.139
7 1 2 165.18034 +/- 0.581

=====================================
Elastic Stiffness Constants Cij (GPa)
=====================================

406.91480 165.18034 165.18034 0.00000 0.00000 0.00000
165.18034 406.91480 165.18034 0.00000 0.00000 0.00000
165.18034 165.18034 406.91480 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 306.82818 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 306.82818 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000 306.82818
发表于 2006-12-21 14:05:41 | 显示全部楼层
太笼统了,不知道文件的具体格式,楼主可贴出一个文件的片段看看。
回复 支持 反对

使用道具 举报

发表于 2006-12-21 14:54:18 | 显示全部楼层
[/code]
huanlf@huanlf-desktop:/tmp/test$ cat txt
line 1
line2
line3
huanlf@huanlf-desktop:/tmp/test$ grep -nH 2 txt
txt:2:line2
huanlf@huanlf-desktop:/tmp/test$ grep -nH 2 txt | awk -F: '{print $2}'
2
huanlf@huanlf-desktop:/tmp/test$
[/code]
回复 支持 反对

使用道具 举报

发表于 2006-12-21 16:59:42 | 显示全部楼层
0 16:52:36$ cat -n t.c
     1  void find()
     2  {
     3          int i;
     4  }
     5  main()
     6  {
     7          fin
0 16:52:49$ cat -n t.c|grep int|awk '{print $1}'
3
回复 支持 反对

使用道具 举报

发表于 2006-12-21 17:00:18 | 显示全部楼层
0 16:52:36$ cat -n t.c
     1  void find()
     2  {
     3          int i;
     4  }
     5  main()
     6  {
     7          fin
0 16:52:49$ cat -n t.c|grep int|awk '{print $1}'
3
回复 支持 反对

使用道具 举报

发表于 2006-12-21 17:01:23 | 显示全部楼层
0 16:52:36$ cat -n t.c
     1  void find()
     2  {
     3          int i;
     4  }
     5  main()
     6  {
     7          fin
0 16:52:49$ cat -n t.c|grep int|awk '{print $1}'
3
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-21 18:45:51 | 显示全部楼层
谢谢各位啦,我是为了解决下边的问题,才提出这个问题的 ,只要能提出行号,利用sed ,grep结合循环应该能解决我的问题。当然,我这种思路是不是太笨啦,大家是不是有更好的思路和方法?
我想从很多类似的文本文件中提取出如下一部分并统一保存到另一个文本文件中,被提出的这部分类似如下:
============================
Summary of elastic constants
============================

id i j Cij (GPa)
1 1 1 406.91480 +/- 3.489
4 4 4 306.82818 +/- 0.139
7 1 2 165.18034 +/- 0.581

但这部分类似内容在各个文本中所处的位置不同,也就是说,在1这个文本中它所初的位置是10-15行,而在2文本中它就可能处在12-17行。
这些东东用脚本提取出来,不知到脚本如何编写?
请阁下指点指点?
在此先行谢过!!!

各文本原文件内容类似如下:
C (gradient) : 306.828179
Error on C : 0.138882
Correlation coeff: 0.999999
Stress intercept : 0.000537


============================
Summary of elastic constants
============================

id i j Cij (GPa)
1 1 1 406.91480 +/- 3.489
4 4 4 306.82818 +/- 0.139
7 1 2 165.18034 +/- 0.581

=====================================
Elastic Stiffness Constants Cij (GPa)
=====================================

406.91480 165.18034 165.18034 0.00000 0.00000 0.00000
165.18034 406.91480 165.18034 0.00000 0.00000 0.00000
165.18034 165.18034 406.91480 0.00000 0.00000 0.00000
0.00000 0.00000 0.00000 306.82818 0.00000 0.00000
0.00000 0.00000 0.00000 0.00000 306.82818 0.00000
0.00000 0.00000 0.00000 0.00000 0.00000 306.82818
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-21 19:57:04 | 显示全部楼层
谢谢 弟兄们 感谢你们的真诚帮助 行号解决啦
我若想把提取的行号付给一个变量是不是可以这样:a= "grep -nH 2 txt | awk -F: '{print $2}'"
回复 支持 反对

使用道具 举报

发表于 2006-12-21 20:48:19 | 显示全部楼层
  1. a=$( grep -nH 2 txt | awk -F: '{print $2}' )
复制代码

等号两边不留空格
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-21 23:07:45 | 显示全部楼层

谢谢楼上的各位兄弟

多谢各位,你们的帮助帮了我大忙,让我再次说声谢谢你们
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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