Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWK如何在AWK中的特定步骤中更改行?_Awk - Fatal编程技术网

AWK如何在AWK中的特定步骤中更改行?

AWK如何在AWK中的特定步骤中更改行?,awk,Awk,我的输入片段: 1BGL HO215593 3.915 12.459 9.510 0.7361 0.5777 -0.8536 1BGL C315594 3.857 12.492 9.774 0.2903 -0.0441 -0.1309 1BGL H315595 3.832 12.596 9.751 -1.5776 -0.7625 -1.5600 1BGL O315596 3.751 12.409 9.734 -0.272

我的输入片段:

1BGL    HO215593   3.915  12.459   9.510  0.7361  0.5777 -0.8536
1BGL     C315594   3.857  12.492   9.774  0.2903 -0.0441 -0.1309
1BGL     H315595   3.832  12.596   9.751 -1.5776 -0.7625 -1.5600
1BGL     O315596   3.751  12.409   9.734 -0.2728  0.1281 -1.1830
1BGL    HO315597   3.765  12.318   9.754 -0.2825 -0.0472 -1.9431
1BGL     O415858   6.570   4.320  11.610  0.3536  0.6453 -0.6513
1BGL    HO415859   6.659   4.351  11.619  0.0436  1.3871 -0.0553
1BGL    H6115861   6.645   4.607  11.335  2.0665 -1.6099 -1.7335
1BGL    H6215862   6.721   4.472  11.418 -0.2311  0.3617  1.3831
1BGL     O615863   6.688   4.666  11.503  0.0747 -0.9278  0.2467
1BGL    HO615864   6.676   4.744  11.451  0.9074 -1.0786 -0.1851
1BGL     C515972   4.449  18.685  10.426  0.7000 -0.4471  0.3442
1BGL     H515973   4.528  18.725  10.363 -0.4525  1.0824 -0.1756
1BGL     O515974   4.342  18.651  10.331  0.1934  0.1445  0.2786
1BGL     C115975   4.322  18.744  10.238  0.0047 -0.4785  0.1790
1BGL     H115976   4.416  18.778  10.194 -0.9920  1.9578 -0.2411
1BGL     C215977   4.251  18.864  10.310 -0.6103  0.0598 -0.3355
1BGL     H215978   4.153  18.842  10.352  0.6769 -0.5089  2.5981
我想要这样的输出

1BGL    HO215593   3.915  12.459   9.510  0.7361  0.5777 -0.8536
1BGL     C315594   3.857  12.492   9.774  0.2903 -0.0441 -0.1309
1BGL     H315595   3.832  12.596   9.751 -1.5776 -0.7625 -1.5600
1BGL     O315596   3.751  12.409   9.734 -0.2728  0.1281 -1.1830
1BGL    HO315597   3.765  12.318   9.754 -0.2825 -0.0472 -1.9431
1BGL     O415858   6.570   4.320  11.610  0.3536  0.6453 -0.6513
2BGL    HO415859   6.659   4.351  11.619  0.0436  1.3871 -0.0553
2BGL    H6115861   6.645   4.607  11.335  2.0665 -1.6099 -1.7335
2BGL    H6215862   6.721   4.472  11.418 -0.2311  0.3617  1.3831
2BGL     O615863   6.688   4.666  11.503  0.0747 -0.9278  0.2467
2BGL    HO615864   6.676   4.744  11.451  0.9074 -1.0786 -0.1851
2BGL     C515972   4.449  18.685  10.426  0.7000 -0.4471  0.3442
3BGL     H515973   4.528  18.725  10.363 -0.4525  1.0824 -0.1756
3BGL     O515974   4.342  18.651  10.331  0.1934  0.1445  0.2786
3BGL     C115975   4.322  18.744  10.238  0.0047 -0.4785  0.1790
3BGL     H115976   4.416  18.778  10.194 -0.9920  1.9578 -0.2411
3BGL     C215977   4.251  18.864  10.310 -0.6103  0.0598 -0.3355
3BGL     H215978   4.153  18.842  10.352  0.6769 -0.5089  2.5981
1
1
1
1
1
1
1
1
每六行,我就在$1 1BGL->2BGL中添加一行。怎么做

我尝试过这样的事情,但我不知道下一步是什么:

#!/bin/bash
index=1
awk '{ for (i = 1; i <= NF; ++i) if (i = 6) index=index+1; print $1=($index)BGL  }' after_SOL.gro | tee after_SOL2.gro

第一种解决方案:不使用函数的简单解决方案

awk '
FNR==1{
  ++count
  value=count"BGL"
}
{
  $1=value
}
1
FNR%6==0{
  ++count
  value=count"BGL"
}
'  Input_file
说明:添加上述内容的详细说明

awk '                        ##Starting awk program from here.
function add_counter() {     ##Creating function named add_counter here.
  ++count                    ##increment value of count with 1.
  value=count"BGL"           ##Creating variable value whose value is count and string BGL here.
}
FNR==1{                      ##Checking condition if FNR==1 then do following.
  add_counter()              ##Calling function add_counter here.
}
{
  $1=value                   ##Assigning variable value to current 1st field of current line.
}
1                            ##Mentioning 1 will print edited/non-edited lines here.
FNR%6==0{                    ##Checking condition if FNR%6==0 then do following.
  add_counter()              ##Calling function add_counter here.
}
'  Input_file                ##Mentioning Input_file name here.


第二种解决方案:采用函数法:

awk '
function add_counter() {
  ++count
  value=count"BGL"
}
FNR==1{
  add_counter()
}
{
  $1=value
}
1
FNR%6==0{
  add_counter()
}
'  Input_file

另一种仅使用模运算的
awk
解决方案:

awk '{$1 = value ? value : $1} 1; NR%6 == 0{value = int(NR/6)+1 "BGL"}' file.csv |
column -t

1BGL  HO215593  3.915  12.459  9.510   0.7361   0.5777   -0.8536
1BGL  C315594   3.857  12.492  9.774   0.2903   -0.0441  -0.1309
1BGL  H315595   3.832  12.596  9.751   -1.5776  -0.7625  -1.5600
1BGL  O315596   3.751  12.409  9.734   -0.2728  0.1281   -1.1830
1BGL  HO315597  3.765  12.318  9.754   -0.2825  -0.0472  -1.9431
1BGL  O415858   6.570  4.320   11.610  0.3536   0.6453   -0.6513
2BGL  HO415859  6.659  4.351   11.619  0.0436   1.3871   -0.0553
2BGL  H6115861  6.645  4.607   11.335  2.0665   -1.6099  -1.7335
2BGL  H6215862  6.721  4.472   11.418  -0.2311  0.3617   1.3831
2BGL  O615863   6.688  4.666   11.503  0.0747   -0.9278  0.2467
2BGL  HO615864  6.676  4.744   11.451  0.9074   -1.0786  -0.1851
2BGL  C515972   4.449  18.685  10.426  0.7000   -0.4471  0.3442
3BGL  H515973   4.528  18.725  10.363  -0.4525  1.0824   -0.1756
3BGL  O515974   4.342  18.651  10.331  0.1934   0.1445   0.2786
3BGL  C115975   4.322  18.744  10.238  0.0047   -0.4785  0.1790
3BGL  H115976   4.416  18.778  10.194  -0.9920  1.9578   -0.2411
3BGL  C215977   4.251  18.864  10.310  -0.6103  0.0598   -0.3355
3BGL  H215978   4.153  18.842  10.352  0.6769   -0.5089  2.5981

column-t
用于获取表格数据,如果您不需要,可以跳过它。

谢谢。你在哪里学的awk。我找不到很好的课程。例如,我用0美元代替1美元谢谢。你在哪里学的awk。我找不到很好的课程。例如,我用$0而不是1来打印整行,我不知道我可以用“1”而不是$0$0 FNR%6==0{add_counter()}`我不知道,为什么要检查FNR==1?你检查是否有一行,它停在文件的末尾?@Jakub,我从它的手册页学到了awk,为了解释,我相信我在我的帖子中添加了详细的解释,请检查一下,让我知道then@Jakub,我刚去了awk标签的SO页,拿到了这本书,你可以读这本书来学习awk
awk '{$1 = value ? value : $1} 1; NR%6 == 0{value = int(NR/6)+1 "BGL"}' file.csv |
column -t

1BGL  HO215593  3.915  12.459  9.510   0.7361   0.5777   -0.8536
1BGL  C315594   3.857  12.492  9.774   0.2903   -0.0441  -0.1309
1BGL  H315595   3.832  12.596  9.751   -1.5776  -0.7625  -1.5600
1BGL  O315596   3.751  12.409  9.734   -0.2728  0.1281   -1.1830
1BGL  HO315597  3.765  12.318  9.754   -0.2825  -0.0472  -1.9431
1BGL  O415858   6.570  4.320   11.610  0.3536   0.6453   -0.6513
2BGL  HO415859  6.659  4.351   11.619  0.0436   1.3871   -0.0553
2BGL  H6115861  6.645  4.607   11.335  2.0665   -1.6099  -1.7335
2BGL  H6215862  6.721  4.472   11.418  -0.2311  0.3617   1.3831
2BGL  O615863   6.688  4.666   11.503  0.0747   -0.9278  0.2467
2BGL  HO615864  6.676  4.744   11.451  0.9074   -1.0786  -0.1851
2BGL  C515972   4.449  18.685  10.426  0.7000   -0.4471  0.3442
3BGL  H515973   4.528  18.725  10.363  -0.4525  1.0824   -0.1756
3BGL  O515974   4.342  18.651  10.331  0.1934   0.1445   0.2786
3BGL  C115975   4.322  18.744  10.238  0.0047   -0.4785  0.1790
3BGL  H115976   4.416  18.778  10.194  -0.9920  1.9578   -0.2411
3BGL  C215977   4.251  18.864  10.310  -0.6103  0.0598   -0.3355
3BGL  H215978   4.153  18.842  10.352  0.6769   -0.5089  2.5981