Sorting 如何提取列,然后求和并对其排序?

Sorting 如何提取列,然后求和并对其排序?,sorting,sed,awk,cut,Sorting,Sed,Awk,Cut,我在提取列时遇到问题,因为不是每一列都有一行 请看图片: 现在我想列出列,例如: "Label" #2 #6 #sum of #2 and #6 我想按最后一列排序,它是2和6的和 我该怎么做? Thx使用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 }' 请注意,仅从屏幕截

我在提取列时遇到问题,因为不是每一列都有一行

请看图片:

现在我想列出列,例如:

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

我该怎么做?
Thx

使用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
}'
请注意,仅从屏幕截图猜测列宽。宽度需要调整

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


请参见

如果您的输入具有“标准”awk/排序字段delimeters,则一般答案可能类似

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

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

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

  awk 'NF > 5 {print $0, $2+$3 }' | sort -k3 -n
这将只处理至少有5列的行。或者如果有一个范围,你可以

  awk 'NF > 5 && NF < 9 { ... }'  | sort ...
awk'NF>5&&NF<9{…}排序。。。
NF
是一个预定义的AWK变量,表示当前行上的字段数(即用于您目的的数据列)。上面的示例过滤掉不符合条件的行(因此您可以将它们视为if语句的简短版本)


由于没有可用的测试数据,您必须根据需要调整此设置

假设: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
awk'{
#查找第一个数字

对于(I=1;I列出一些测试输入和期望的输出。而且,如果您的评论中的所有附加/澄清信息都添加到您的原始帖子中,您的问题可能会得到更好的说明。另外,请确保提及所有限制,以便您能获得一些有效的帮助。并非每个人都阅读所有评论。Thor是对的,请提供一些建议可编程的示例输入(我如何根据.jpg图像测试解决方案)和一些清晰的期望输出)。事实上,您正在添加条件以解决问题,作为对每个答案的注释,这意味着:a.)你的问题没有很好地说明,b.)你没有详细了解整个情况以确切了解你需要什么,但问题是通常使用的awk不会像我想要的那样工作。这是因为不是每个列都被填满。
FIELDWIDTHS
(而不是
FILEDWIDTHS
)是列宽的列表。例如,
FIELDWIDTHS=“9 13 16”
gawk
将在第1列使用前9个字符(
$1
),第2列的后面13个字符,第3列的后面16个字符。Ufff..这不是我想要的..我忘了说我的表是动态的,它每一次都在变化,所以我不能接受你的解决方案..Thx需要帮助,但还有其他解决方案吗?Thx..但它传递了一些列,我不需要它..Thx无论如何需要帮助!