Bash Awk(或其他)如何强制字段编号保持不变?

Bash Awk(或其他)如何强制字段编号保持不变?,bash,awk,Bash,Awk,我有一个输入文件,其中包含以下行: A;B;C;D;E;F;G;H;I 1;3312;14.025538;14.617777;0.;0.000000001;253.777023;3.232552;52487. 2;3312;13.206808;13.779518;0.;260.078461;258.954529;3.154804;52487. 3;3312;13.054019;13.491556;0.;256.126221;251.776566;3.247191;52487. 4;3312;12

我有一个输入文件,其中包含以下行:

A;B;C;D;E;F;G;H;I
1;3312;14.025538;14.617777;0.;0.000000001;253.777023;3.232552;52487.
2;3312;13.206808;13.779518;0.;260.078461;258.954529;3.154804;52487.
3;3312;13.054019;13.491556;0.;256.126221;251.776566;3.247191;52487.
4;3312;12.556334;13.061086;0.;255.570862;254.689224;3.190753;52487.
5;3312;11.719666;11.96375;0.;100.0546;254.258652;3.220166;52487.
我需要始终读取基于A、C、D和F的字段,在本例中为$1、$3、$4和$6。因此awk很简单:

awk -F";" '{print $1, $3, $4, $6}' input.txt
但是,如果字母顺序不同,如何得到相同的结果?在示例中,顺序是(我只打印第一行,但下一行的位置也会不同):

我仍然需要始终读取基于A、C、D和F的字段,但现在它们分别是$1、9、8和$6。它们可能会因输入文件的不同而有所不同

是否有一种方法可以根据a、C、D和F对字段进行排序,而不管它们的顺序如何,并且忽略所有其他字段,因此我将始终使用如下内容:

A;C;D;E
1;14.025538;14.617777;0.000000001
2;13.206808;13.779518;260.078461
3;13.054019;13.491556;256.126221
4;12.556334;13.061086;255.570862
5;11.719666;11.96375;100.0546

$awk-F\-vOFS=\;'NR==1{(i=1;iI建议-如果列具有可区分的模式-使用sed对输入进行重新排序以使其统一。然后将此信息传递给awkIs有没有理由使用长管道的
awk
s?我确信
awk
功能强大,可以在一次调用中完成任务!您到底想实现什么?p请暴露您的问题,提供一个示例输入和想要的输出。正如@gniourf_gniourf所说,您首先需要向我们公开输入的实际外观。如果最初的B是第2列,并且输入已更改,则B变为第9列。我如何强制B返回为第2列?然后我可以将其传输到awk。我将尝试获取我的代码示例。Wh我想要一个cd和F是$1、$3、$4和$6,因为我会把它输送到awk,然后变成$1、$2、$3和$4。或者更简单的是,如何强制cd和F是第1、2、3和4列,并且无论发生什么都是这样。这样输入的顺序可以改变,但不再重要了。如果你明白我的意思,请加上uno听推荐并添加示例数据和所需的输出。祝你好运。做得很好;添加
-v of s=\;
以将输出字段与
实例分开。我别无选择,只能说谢谢谢谢!这个awk命令将保留在我的前5名中,非常有用。这样做会使事情变得更加简单。我只是用其他变量和事情都很顺利。是的,mklement0感谢它使用-v of s=\;完成了这项工作;
A;C;D;E
1;14.025538;14.617777;0.000000001
2;13.206808;13.779518;260.078461
3;13.054019;13.491556;256.126221
4;12.556334;13.061086;255.570862
5;11.719666;11.96375;100.0546