将一个文件追加到第二个文件直到文件末尾

将一个文件追加到第二个文件直到文件末尾

我有两个文件。第一个只是一个数字。这个数字每次都会被计算和改变。第二个文件有一堆列,我不知道行数(可以更改)。例如,我有这样的事情:

文件一:

12

文件2:

1 2 3 
4 5 6
7 8 9

我想

1 2 3 12
4 5 6 12
7 8 9 12

我的想法是你可以做while not EOFthencat File 1File 2。我怎样才能这样做呢?

答案1

其他awk

$ awk 'BEGIN{getline l <"file1"};{print $0, l}' file2
1 2 3 12
4 5 6 12
7 8 9 12
  • BEGIN在读取输入文件之前首先执行块。第一行file1是使用getline()函数检索,存储在变量中l
  • 对于 的每一行file2,我们将其内容$0与 一起打印l,并用 分隔OFS,默认情况下是一个空格。

答案2

使用 awk

$ awk -v n=$(cat file1) '{print $0,n}' file2
1 2 3 12
4 5 6 12
7 8 9 12

csh/上tcsh,尝试:

awk -v n=`cat file1` '{print $0,n}' file2

怎么运行的

  • -v n=$(cat file1)

    这会将 的内容分配file1给 awk 变量n

  • print $0,n

    这将打印后面跟着 的每一行n

使用 sed

$ sed '1{h;d}; G;s/\n/ /' file1 file2
1 2 3 12
4 5 6 12
7 8 9 12

怎么运行的

  • 1{h;d}

    读取的第一行保存在保留空间中,然后从该模式空间中删除(因此不会打印)。

  • G; s/\n/ /

    对于所有后续行,我们使用 get 命令G。这会在模式空间中附加一个换行符和保留空间。然后我们用空格替换换行符。

答案3

这应该可以工作(在这种情况下 file2 会被更新,如果您不希望这样,请删除 -i 标志)

   sed -i "s/.*/& $(cat file1)/" file2

答案4

为了sed恋人来说——阅读文件1对于每一行文件2这不是个好主意。使用变量更好:

my_var=$(<file1) ; sed "s/$/ $my_var/" file2

或更安全

read -r my_var <file1 ; sed "s/$/ $my_var/" file2

相关内容