将第一行文本复制到另一个文本文件

将第一行文本复制到另一个文本文件

前:

文件1

123
456

文件2

foo
testing

后:

文件1

123
456

文件2

foo
testing 123

任何帮助将不胜感激。

答案1

尝试这个,

sed -i "$ s/$/ $(head -1 file1)/" file2
testing 123
  • $编辑文件的最后一行。
  • s/$将 EOL 替换为$(head -1 file1)file1 的第一行。

答案2

根据您在示例中给出的内容,这是我向您建议的

echo -en " `head -1 file1`" >> file2

答案3

这项任务并不像乍一看那么明显。

要么使用 Slyx 的代码,然后删除不需要的换行符sed $!N;$s/\n//;P;D,要么找到一个已知不属于这两个文件的字符串,让我们说=snip=并做

sed '1h;1,/=snip=/d;$G;s/\n/ /' file1 <( echo =snip=) file2

输出可以通过管道传输到另一个文件,然后复制到file2(即使您的sed风格有选项-i,这在使用两个文件的一部分时也不起作用)。

代码有什么作用?

  • 1h将第 1 行存储在保留空间( 的“剪贴板” sed)中以便稍后追加
  • 1,/=snip=/d删除从第 1 行到标记行的所有内容,因此只会file2打印
  • $G将保留空间中保存的行追加到最后一行 ( $)
  • s/\n/ /用空格替换嵌入的换行符。这只会在我们附加保留空间后的最后一行发生
  • file1 <( echo =snip=) file2文件是否流式传输到sed:首先file1提取第一行,然后包含一个虚拟文件=snip=以了解文件 1 何时结束,最后file2

事实上,这是一个学习sed技巧的好任务。

答案4

ed

ed file2 <<END
1a
$(head -n 1 file1)
.
1s/$/ /
1,2j
wq
END

但 awk 可能更清楚:

awk -v "f1=$(head -n1 file1):" 'NR == 1 {$0 = $0 FS f1} 1' file2

这不会将 file2 保存到位。为此,您可以使用 GNU awk 来做到这一点

gawk -i inplace -v "f1=$(head -n1 file1):" 'NR == 1 {$0 = $0 FS f1} 1' file2

或使用任何 awk:

awk -v ... file2 > tmpfile2 && mv tmpfile2 file2

另一个呆呆的选择

gawk '
    FNR == 1 { if (NR == FNR) {f1 = $0; nextfile} else {$0 = $0 FS f1} }
    {print}
' file1 file2

相关内容