在文件中查找1个(或更多)字符串,并根据已建立的字符串在每次匹配后插入一行

时间:2018-03-07 12:02:05

标签: bash awk

我有以下文本文件:

STRONGTUND TR12 REM Mary
STRONGTUND TR12 LAC 78
STRONGTUND TR12 BER -2

STRONGTUND TR13 REM John
STRONGTUND TR13 LAC 100
STRONGTUND TR13 BER -67

STRONGTUND TR14 REM Greg
STRONGTUND TR14 LAC 23
STRONGTUND TR14 BER -6

我想要实现的目标如下:寻找与STRONGTUND TR\d LAC \d正则表达式匹配的字符串。匹配后,在新行上添加另一个字符串,例如:STRONGTUND $SAME-TR-NUMBER-AS-MATCHED-STRING LACv8 $INPUT,其中" $ INPUT"是变量(可以是文本或不是文本)并被赋予脚本以放入它创建的每一行。请注意,$ INPUT对于每一行都是不同的。

在上面的文本示例中,结果应该是:

STRONGTUND TR12 REM Mary
STRONGTUND TR12 LAC 78
STRONGTUND TR12 LACv8 212
STRONGTUND TR12 BER -2

STRONGTUND TR13 REM John
STRONGTUND TR13 LAC 100
STRONGTUND TR13 LACv8 234
STRONGTUND TR13 BER -67

STRONGTUND TR14 REM Greg
STRONGTUND TR14 LAC 23
STRONGTUND TR14 LACv8 111
STRONGTUND TR14 BER -6

这是否可以在不使用编程语言的情况下实现(所以只能使用linux工具?)

1 个答案:

答案 0 :(得分:0)

是的,有可能。例如,像这样:

awk -v "out=FILE_OUT" '1 { print; print $0 > out }
$0 ~ "STRONGTUND TR[0-9]+ LAC [0-9]+" {
    printf "Enter value: "
    getline val < "-"
    print $1,$2,"LACv8",val > out
}' FILE_IN

它将解析文件FILE_IN,询问用户在LACv8之后输入的值并将新内容保存到FILE_OUT。