-4

我在提取列时遇到问题,因为并非每一列都有一行。

看图: http:
//www.dodaj.rs/f/1F/Fw/1dAklQ4M/snap008.jpg

现在我想列出列,例如:

    "Label"   #2     #6    #sum of #2 and #6

我想按最后一列排序,它是#2 和#6 的#sum

我怎样才能做到这一点?谢谢

4

4 回答 4

0

如果您的输入具有“标准”awk/sort 字段分隔符,则一般答案可能类似于。

awk '{print $0, $2+$3}' | sort -n -k3

根据您的输入,您可能需要修改输入或命令管道。

于 2012-07-29T09:13:22.407 回答
0

假设: 1. 从 #1 开始的数字始终存在。2. 前面的栏目中没有列出数字。3. 第一个和第二个字段永远不会为空。

您可以查找第一个数字并从那里开始:

awk '{

# Look for the first digit
for( I=1 ; I<=NF ; I++ ) { if ( $I ~ /^[[:digit:]]+$/ ) { break } }

# Print the necessary fields
print $2, $(I+1), $(I+5), $(I)+$(I+5)

}' my_file
于 2012-07-29T20:20:26.723 回答
0

如果您知道有效输入的列数,请尝试此方法:

  awk 'NF > 5 {print $0, $2+$3 }' | sort -k3 -n

这只会处理至少有 5 列的行。或者,如果有一个范围,你可以像

  awk 'NF > 5 && NF < 9 { ... }'  | sort ...

NF是一个预定义的 AWK 变量,表示当前行上的字段数(即用于您的目的的数据列)。上面的示例过滤掉了不满足条件的行(因此您可以将它们视为 if 语句的简短版本)

由于没有可用的测试数据,您必须根据自己的需要进行调整。

于 2012-07-29T17:24:48.810 回答
0

使用 Gawk,您可以使用固定宽度的列来读取数据:

gawk -v FIELDWIDTHS="9 13 16 9 11 11 7 6 6 6 6 10 6 6 6 10 10" '{
  print $2, $9, $13, $9 + $13
}'

请注意,仅从屏幕截图中猜测了列宽。宽度需要调整。

您也可以合并要忽略的列的列宽。

https://www.gnu.org/software/gawk/manual/gawk.html#Constant-Size

于 2012-07-29T08:58:59.687 回答