【发布时间】:2014-01-10 05:33:01
【问题描述】:
我正在尝试从名为 mass.mas03 的 multicolumn file 中提取一些数据。列由tab 分隔。当数据开始时,您可以看到有空的条目(即第 44 行 VS 第 45 行)。
整个想法是从特定列(MASS EXCESS,即)为多行提取数据,取总和并在 xy 轴系统上创建一条水平线, y 坐标是这些值的总和。
以第 41、65、74 行为例
-1 0 1 1 H 7288.97050 0.00011 0.0 0.0 B- * 1 007825.03207 0.00010
0 4 4 8 Be 4941.672 0.035 7062.435 0.004 B- -17979.819 1.001 8 005305.103 0.037
4 7 3 10 Li -n 33050.581 15.124 4531.555 1.512 B- 20443.910 15.123 10 035481.259 16.236
我想做: 7288.97050 + 4941.672 - 33050.581 = - 20819.9385 。如果我使用awk 命令来访问数据,我会遇到这个问题
> awk '/8 Be/ {print $6}' mass.mas03
4941.672
>awk '/10 Li/ {print $6}' mass.mas03
-n
我不知道awk 是否不仅是数据选择以及“情节”的最佳选择,因此我愿意接受建议!
一个明显的解决方案是在需要时使用$7 而不是$6,但它是一个大文件,我正在尝试将整个过程自动化一点。
对于这个奇怪的列文件,有没有办法“选择”所需的数据并对它们应用一些简单的计算?
【问题讨论】:
-
我怀疑
awk您需要提供-F'\t'选项以将字段分隔符设置为制表符,然后改用$7。 -
为什么要减去 33050.581(而不是加上)?
-
如果列由制表符分隔,您可以只检查是否有 1 个或两个连续的制表符,以确定列是否为空..(如 @TLP 所指出的)
-
@TLP:我使用了
awk -F'\t' '/10 Li/ {print $7}' mass.mas03和awk -F'\t' '/10 Li/ {print $6}' mass.mas03,但我得到了一个空输出。 -
该文件不是制表符分隔的(它只是列之间的空格)..您需要在将其发送到 awk 之前对其进行后处理