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