awk操纵多个文件

joe*_*joe 0 awk filenames line output

我有以下文件file1和file2(作为示例)

$cat file1.txt
SERVICE: 1
TASK: 1
RESULT: 1
ADDITIONAL: 1

SERVICE: 2
TASK: 2
RESULT: 2
ADDITIONAL: 2

SERVICE: 3
TASK: 3
RESULT: 3
ADDITIONAL: 3
Run Code Online (Sandbox Code Playgroud)

$cat file2.txt
SERVICE: 1
TASK: 1
RESULT: 1
ADDITIONAL: 1

SERVICE: 2
TASK: 2
RESULT: 2
ADDITIONAL: 2

SERVICE: 3
TASK: 3
RESULT: 3
ADDITIONAL: 3
Run Code Online (Sandbox Code Playgroud)

我需要以下输出:

文件的名称和每个块在SERVICE上循环:在下面的1行中用管道"|"分开

file1.txt | SERVICE: 1 | TASK: 1 | RESULT: 1 | ADDITIONAL: 1
file1.txt | SERVICE: 2 | TASK: 2 | RESULT: 2 | ADDITIONAL: 2
file1.txt | SERVICE: 3 | TASK: 3 | RESULT: 3 | ADDITIONAL: 3

file2.txt | SERVICE: 1 | TASK: 1 | RESULT: 1 | ADDITIONAL: 1
file2.txt | SERVICE: 2 | TASK: 2 | RESULT: 2 | ADDITIONAL: 2
file2.txt | SERVICE: 3 | TASK: 3 | RESULT: 3 | ADDITIONAL: 3
Run Code Online (Sandbox Code Playgroud)

你能帮我找到实现这个目标的方法吗?

到目前为止,我能够把它排成一行,但我有问题,在每个块循环上获取文件名在SERVICE上:

我拥有的命令如下:

cat * | awk -F ":" '/^SERVICE:/ {print ""} {printf"|" substr($0, index($0,$1))}'
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助

Ed *_*ton 5

$ awk -v RS= -F'\n' -v OFS=' | ' '{$1 = FILENAME OFS $1}1' file1.txt file2.txt
file1.txt | SERVICE: 1 | TASK: 1 | RESULT: 1 | ADDITIONAL: 1
file1.txt | SERVICE: 2 | TASK: 2 | RESULT: 2 | ADDITIONAL: 2
file1.txt | SERVICE: 3 | TASK: 3 | RESULT: 3 | ADDITIONAL: 3
file2.txt | SERVICE: 1 | TASK: 1 | RESULT: 1 | ADDITIONAL: 1
file2.txt | SERVICE: 2 | TASK: 2 | RESULT: 2 | ADDITIONAL: 2
file2.txt | SERVICE: 3 | TASK: 3 | RESULT: 3 | ADDITIONAL: 3
Run Code Online (Sandbox Code Playgroud)