连接两个文件并用换行符分隔它们

use*_*326 7 command-line text-processing

我有两个文件:

k.txt:

3 5 7 9 19 20 
Run Code Online (Sandbox Code Playgroud)

h.txt:

000010
100001
111001
Run Code Online (Sandbox Code Playgroud)

如果我只使用 cat,则没有换行符。我需要一个命令来提供一个如下所示的文件:

3 5 7 9 19 20 
000010
100001
111001
Run Code Online (Sandbox Code Playgroud)

ter*_*don 19

如果正如 steeldriver 所建议的那样,您的文件没有以换行符结尾,您可以尝试:

awk '{print}' k.txt h.txt > newfile
Run Code Online (Sandbox Code Playgroud)

或者,如果你喜欢打高尔夫球

awk 1 k.txt h.txt > newfile
Run Code Online (Sandbox Code Playgroud)

或者

perl -lne 'print' k.txt h.txt 
Run Code Online (Sandbox Code Playgroud)

或者

( cat k.txt ; echo ""; cat h.txt; echo ) > newfile
Run Code Online (Sandbox Code Playgroud)

或者

echo "$(cat k.txt)"; echo "$(cat h.txt)"
Run Code Online (Sandbox Code Playgroud)

  • 我想将其编辑为“awk 1”,只是为了它的外观。:D (2认同)
  • +1。IMO 最后一个答案是最好的:命令替换 `$(cat file)` 将删除任何尾随换行符,而 `echo` 将显式添加一个。仅供参考,bash 内置了 `$(cat file)` ==> `$(<file)` —— 节省了几微秒。并使用一个命令:`printf "%s\n" "$(<k.txt)" "$(<h.txt)"` (2认同)

Cyr*_*rus 9

用 bash 试试这个:

cat k.txt <(echo) h.txt > new.txt
Run Code Online (Sandbox Code Playgroud)


A.B*_*.B. 5

使用sed

sed '/^/ r h.txt' k.txt
Run Code Online (Sandbox Code Playgroud)

或更好(感谢@steeldriver

sed '$a\' k.txt h.txt
Run Code Online (Sandbox Code Playgroud)

使用ed

(echo "0a"; cat k.txt; echo "."; echo "wq") | ed -s h.txt
Run Code Online (Sandbox Code Playgroud)

以及缺少的换行符k.txt

(echo "0a"; cat k.txt; echo ""; echo "."; echo "wq") | ed -s h.txt
Run Code Online (Sandbox Code Playgroud)

或者如果您需要单独的输出文件:

(echo "0a"; cat k.txt; echo ""; echo "."; echo "w out.txt"; echo "q") | ed -s h.txt
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 5

这就是paste的工作:

paste -sd'\n' file1 file2
Run Code Online (Sandbox Code Playgroud)
  • -smakepaste按命令行顺序连接每个文件的所有行。
  • -d'\n'makepaste使用换行符作为分隔符。