Bash帮助,将各种文件中的文本行放在一个新文件中

时间:2018-03-13 00:12:54

标签: bash

bash相当新,我有几个不同的文件,每个都有数千行,我想从每个文件中取出每一行,并将它们放在一行,在一个新文件中,

例如,如果file1包含IP

192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5

file2包含端口

123
124
125
126
127

file3包含时间戳,file4包含描述

我希望我的输出为:

192.168.1.1 : 123 : 01/01/2012 : blah blah blah
192.168.1.2 : 124 : 01/02/2012 : blah blah

我怎么能把它们放在一起呢?

2 个答案:

答案 0 :(得分:2)

使用paste(1)sed(1)

paste file1 file2 file3 file4 | sed 's/\t/ : /g' > out

答案 1 :(得分:1)

将四个文件打开为四个独立的文件描述符3到6,然后在循环中从每个文件中读取一行。 0,1和2分别作为stdin,stdout和stderr打开,因此3是第一个未使用的描述符。

exec 3< file1
exec 4< file2
exec 5< file3
exec 6< file4

while IFS= read -r ip          <&3 &&
      IFS= read -r port        <&4 &&
      IFS= read -r timestamp   <&5 &&
      IFS= read -r description <&6
do
    echo "$ip : $port : $timestamp : $description"
done