如何将输入文件中的后续行插入另一个文件的每行末尾?

如何将输入文件中的后续行插入另一个文件的每行末尾?

我有两个带有日志输出的文件。我需要按照下面描述的方式加入他们

第一个文件

Line 1
Line 2
Line 3

第二个文件

Need to be placed at the end of Line 1
Need to be placed at the end of Line 2
Need to be placed at the end of Line 3

预期结果:

Line 1 Need to be placed at the end of Line 1
Line 2 Need to be placed at the end of Line 2
Line 3 Need to be placed at the end of Line 3

我知道如何使用 sed 附加文本/输入文件,但如果是文件,它将插入文件的所有内容,所以这不是我要找的。任何帮助表示赞赏:)

答案1

假设文件应该逐行“连接在一起”,请使用paste.

paste实用程序从一个或多个文件获取输入,并生成由“并排粘贴”的文件组成的输出。该paste实用程序创建其命令行上列出的文件列。

paste first_file second_file

要使用空格作为文件之间的分隔符(而不是默认的制表符),请paste与其-d选项一起使用:

paste -d ' ' first_file second_file

paste另请参阅您系统上的手册。

从某种意义上说,与提取字段/列paste相反。cut

答案2

使用awk

awk 'NR==FNR { arr[NR]=$0; next}{ printf "%s %s\n", arr[FNR], $0 }' first_file second_file

NR==FNR{ arr[NR]=$0arr这将为第一个文件创建一个按行(记录号)索引的数组。这是因为当 awk 开始读取第二个文件时,FNR 被设置为零,而 NR 是迄今为止从所有文件读取的总记录,即当新文件开始读取时,NR 不会设置为零。

next语句告诉 awk 停止处理当前记录(读取行)并转到下一条记录。这意味着当前行不会执行更多命令。因此,创建 array 后,不会对第一个文件执行arr该语句。printf

接下来printf打印arr第二个文件中的所有记录。

我什么也没做,只是轻微地更改的命令取自这个答案

相关内容