在 awk 中以特定方式重命名第一列
Rename first column in specific way in awk
这是我的输入文件
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1BGL C5 1 4.977 15.059 2.068
1BGL H5 2 5.025 15.020 2.158
1BGL O5 3 4.881 14.948 2.052
...(a lot of lines between)
...
4LIN HI216099 1.909 19.279 7.886
4LIN HI316100 1.849 19.417 7.987 (the last line, which I want to modify is 116102)
...
...
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
我的输出文件应该是这样的
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1MGD C5 1 4.977 15.059 2.068
1MGD H5 2 5.025 15.020 2.158
1MGD O5 3 4.881 14.948 2.052
...(a lot of lines between)
...
900MGD HI216099 1.909 19.279 7.886
900MGD HI316100 1.849 19.417 7.987 (the last line, which I want to modify is 116102)
...
...
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
我只想修改 100 个文件中的第一列。每 129 行我就增加了价值。例如,第一列中的第 3-131 行有 1MGD,然后是第 132-260 行 - 2MGD,直到 116102 行。
这是我的脚本,但没有用
#!/bin/bash
for index in {1..100}
do
awk 'BEGIN { grp = 129 }
{if (NR>=3 && NR<=116102) {
for (i=1; i<=116102; i++) {
= (int($i/grp)+1)"MGD"
}
}; print [=12=]}' eq15_$index.gro | tee eq2_15_$index.gro
done
你能帮帮我吗?
awk 'NR>=3 && NR<=116102{ x=int((NR-3)/129+1); =x"MGD" }1' file
测试:
您必须设置 start-end NR
和除数来定义它。例如这个测试文件:
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1BGL C5 1 4.977 15.059 2.068
1BGL H5 2 5.025 15.020 2.158
1BGL O5 3 4.881 14.948 2.052
1BGL C5 1 4.977 15.059 2.068
1BGL H5 2 5.025 15.020 2.158
1BGL O5 3 4.881 14.948 2.052
1BGL O5 3 4.881 14.948 2.052
4LIN HI216099 1.909 19.279 7.886
4LIN HI316100 1.849 19.417 7.987 (the last line, which I want to modify
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
每 3 行修改第 3-11 行:
> awk 'NR>=3 && NR<=11{ x=int( (NR-3)/3+1); = x"MGD"}1' file
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1MGD C5 1 4.977 15.059 2.068
1MGD H5 2 5.025 15.020 2.158
1MGD O5 3 4.881 14.948 2.052
2MGD C5 1 4.977 15.059 2.068
2MGD H5 2 5.025 15.020 2.158
2MGD O5 3 4.881 14.948 2.052
3MGD O5 3 4.881 14.948 2.052
3MGD HI216099 1.909 19.279 7.886
3MGD HI316100 1.849 19.417 7.987 (the last line, which I want to modify
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
此外,切勿在同一文件中使用 bash
循环和 awk
。一个 awk
.
就可以完成
这是我的输入文件
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1BGL C5 1 4.977 15.059 2.068
1BGL H5 2 5.025 15.020 2.158
1BGL O5 3 4.881 14.948 2.052
...(a lot of lines between)
...
4LIN HI216099 1.909 19.279 7.886
4LIN HI316100 1.849 19.417 7.987 (the last line, which I want to modify is 116102)
...
...
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
我的输出文件应该是这样的
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1MGD C5 1 4.977 15.059 2.068
1MGD H5 2 5.025 15.020 2.158
1MGD O5 3 4.881 14.948 2.052
...(a lot of lines between)
...
900MGD HI216099 1.909 19.279 7.886
900MGD HI316100 1.849 19.417 7.987 (the last line, which I want to modify is 116102)
...
...
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
我只想修改 100 个文件中的第一列。每 129 行我就增加了价值。例如,第一列中的第 3-131 行有 1MGD,然后是第 132-260 行 - 2MGD,直到 116102 行。
这是我的脚本,但没有用
#!/bin/bash
for index in {1..100}
do
awk 'BEGIN { grp = 129 }
{if (NR>=3 && NR<=116102) {
for (i=1; i<=116102; i++) {
= (int($i/grp)+1)"MGD"
}
}; print [=12=]}' eq15_$index.gro | tee eq2_15_$index.gro
done
你能帮帮我吗?
awk 'NR>=3 && NR<=116102{ x=int((NR-3)/129+1); =x"MGD" }1' file
测试:
您必须设置 start-end NR
和除数来定义它。例如这个测试文件:
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1BGL C5 1 4.977 15.059 2.068
1BGL H5 2 5.025 15.020 2.158
1BGL O5 3 4.881 14.948 2.052
1BGL C5 1 4.977 15.059 2.068
1BGL H5 2 5.025 15.020 2.158
1BGL O5 3 4.881 14.948 2.052
1BGL O5 3 4.881 14.948 2.052
4LIN HI216099 1.909 19.279 7.886
4LIN HI316100 1.849 19.417 7.987 (the last line, which I want to modify
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
每 3 行修改第 3-11 行:
> awk 'NR>=3 && NR<=11{ x=int( (NR-3)/3+1); = x"MGD"}1' file
900 mgdg molecules in water t= 953400.00000 step= 635600000
177255
1MGD C5 1 4.977 15.059 2.068
1MGD H5 2 5.025 15.020 2.158
1MGD O5 3 4.881 14.948 2.052
2MGD C5 1 4.977 15.059 2.068
2MGD H5 2 5.025 15.020 2.158
2MGD O5 3 4.881 14.948 2.052
3MGD O5 3 4.881 14.948 2.052
3MGD HI216099 1.909 19.279 7.886
3MGD HI316100 1.849 19.417 7.987 (the last line, which I want to modify
20389SOL HW177254 0.325 8.307 3.850
20389SOL HW277255 0.245 8.235 3.957
5.75588 25.65343 12.14665
此外,切勿在同一文件中使用 bash
循环和 awk
。一个 awk
.