如何从bash中以制表符分隔的表格中提取单个值?

时间:2015-11-11 16:45:20

标签: bash

我试图从LabelID 1(117.96)中提取Max值。

LabelID        Mean        StdD         Max         Min       Count     Vol(mm^3)        Extent(Vox)
0      20.99750    56.25956  1606.19238   -15.53062     2073413   3591156.654    144   144   100
1      98.31916     7.77291   117.95876    81.89870         110       190.520     11    15     6
3     131.89938    10.77435   154.69934   111.26049          77       133.364     11    12     4

我尝试使用c3d $image $ROI -lstat | awk ‘{print $22}’,但它返回一个空行。 Cut产生类似的结果。

2 个答案:

答案 0 :(得分:5)

#!/bin/bash
target_label=1
target_column=3 # first column is 0, so fourth is 3

while read -r -a columns; do                   # read a line into an array
  if [[ ${columns[0]} = $target_label ]]; then # check label id
    echo "${columns[target_column]}"           # print the column we want
    break                                      # and exit the loop
  fi
done <infile                                   # redirect input for that full block

当然,<infile可以替换为< <(your command goes here),以从命令的输出而不是文件中读取流。

如果您只想接受标签,而不是任何其他类型的空白,请将其设为while IFS=$'\t' read -r -a columns。如果您不想允许合并多个连续的文字标签,请参阅read in bash on tab-delimited file without empty fields collapsing

答案 1 :(得分:5)

请说:

$ awk '$1==1{print $4}' file
117.95876

即,当第一列为1时,打印第4列。