我有两个带有日志输出的文件。我需要按照下面描述的方式加入他们
第一个文件
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]=$0
arr
这将为第一个文件创建一个按行(记录号)索引的数组。这是因为当 awk 开始读取第二个文件时,FNR 被设置为零,而 NR 是迄今为止从所有文件读取的总记录,即当新文件开始读取时,NR 不会设置为零。
该next
语句告诉 awk 停止处理当前记录(读取行)并转到下一条记录。这意味着当前行不会执行更多命令。因此,创建 array 后,不会对第一个文件执行arr
该语句。printf
接下来printf
打印arr
第二个文件中的所有记录。
我什么也没做,只是轻微地更改的命令取自这个答案。