我有一个类似的文件:
H 1 2 3 4
H 1 2 3 4
C 1 2 3 4
$END
$EFRAG
COORD=CART
FRAGNAME=H2ODFT
O 1 2 3 4
H 1 2 3 4
H 1 2 3 4
FRAGNAME=H2ODFT
O 1 2 3 4
H 1 2 3 4
H 1 2 3 4
我想仅从 $EFRAG 行之后的行中删除“1”列。并为 O H H 添加标签。我的预期输出是:
H 1 2 3 4
H 1 2 3 4
C 1 2 3 4
$END
$EFRAG
COORD=CART
FRAGNAME=H2ODFT
Oa 2 3 4
Hb 2 3 4
Hc 2 3 4
FRAGNAME=H2ODFT
Oa 2 3 4
Hb 2 3 4
Hc 2 3 4
我是 bash 编码新手,不太确定从哪里开始。
我正在考虑将 grep 命令通过管道传输到 sed 命令,但我不确定该语法会是什么样子。我也在尝试学习 awk,但该语法对我来说更令人困惑。目前正在尝试阅读一本有关其功能的书。
任何想法或想法将不胜感激!
L
最佳答案
使用以下awk
处理:
awk '$0~/\$EFRAG/ {
start = 1; # marker denoting the needed block
split("a b c", suf); # auxiliary array of suffixes
}
start {
if (/^FRAGNAME/) idx = 1; # encountering subblock
if (/^[OH]/) { # if starting with O or H char
$2 = "";
$1 = $1 suf[idx++];
}
}1' test.txt
H 1 2 3 4
H 1 2 3 4
C 1 2 3 4
$END
$EFRAG
COORD=CART
FRAGNAME=H2ODFT
Oa 2 3 4
Hb 2 3 4
Hc 2 3 4
FRAGNAME=H2ODFT
Oa 2 3 4
Hb 2 3 4
Hc 2 3 4
关于bash - 找到一个模式,然后仅在该模式之后执行换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75340776/