基于另一个文件在同一位置引入换行符

Ram*_*esh 5 awk perl

我有 3 个输入文件,它们都具有相同的行数。我想出了一个电影例子来让这个问题看起来很有趣。

file1.txt -- 主要包含演员姓名。

1234|jacknicholson|actor
5678|jacknicholson|director
4321|christianbale|actor
Run Code Online (Sandbox Code Playgroud)

file2.txt -- 包含演员的电影。

1234|oneflewovercuckoosnest^asgoodasitgets
5678|theshining
4321|batmanbegins^darkknight
Run Code Online (Sandbox Code Playgroud)

file3.txt -- 演员的住所。

1234|california
5678|hollywoodstudios
4321|losangeles
Run Code Online (Sandbox Code Playgroud)

我根据名称相等的条件拆分第一个输入文件,我需要应用一些算法。命令如下。

awk -F '|' 'NR>1 && $2 != prev {print ""} {prev=$2; print}' file1.txt
Run Code Online (Sandbox Code Playgroud)

上面的命令将使我的第一个文件 ( file1.txt) 成为,

1234|jacknicholson|actor
5678|jacknicholson|director

4321|christianbale|actor
Run Code Online (Sandbox Code Playgroud)

我还需要在其余 2 个文件中的相同位置引入空格,以便我可以应用我的算法。

我想到的一种方法是,将空格在file1.txt数组中的位置存储,然后当我在剩余的 2 个文件中遇到该位置时,引入空格。

Joh*_*024 5

要在文件中与 中的演员变化相同的位置引入一个空行file1.txt,请尝试:

$ awk -F '|' '{save=$0; getline<"file1.txt"} NR>1 && $2!=prev {print ""} {prev=$2; print save}' file2.txt
1234|oneflewovercuckoosnest^asgoodasitgets
5678|theshining

4321|batmanbegins^darkknight
Run Code Online (Sandbox Code Playgroud)

除了它被扩展为同时读取两个文件之外,上面的工作方式与您的代码非常相似。它从file2.txt变量中读取并保存该行save。If then 从 读取file.txt,并使用与您的代码相同的逻辑,确定演员是否发生变化,如果发生变化,则打印换行符。然后打印它从 接收到的行file2.txt