我有一个文件,其中每一行都包含一个字符串,如下所示:
Jane
Sally
John
Jim
Run Code Online (Sandbox Code Playgroud)
我想重新格式化我的文件,以便将每一行合并成一行,并用一个新字符串分隔每个原始字符串,如下所示:
JaneNNNNNSallyNNNNNJohnNNNNNJim
Run Code Online (Sandbox Code Playgroud)
我可以使用 cat 或 paste 将我的多行格式组合成单行格式,如下所示:
cat file.txt | tr -s '\n' 'NNNNN'
paste -sd 'NNNNN' file.txt
Run Code Online (Sandbox Code Playgroud)
但是这些仅包括一个“N”作为字符串之间的填充,如下所示:
JaneNSallyNJohnNJim
Run Code Online (Sandbox Code Playgroud)
如何填充多字符字符串?也许 sed 会更有效?
使用 GNU awk:
awk '$1=$1' OFS='NNNNN' RS='' file
Run Code Online (Sandbox Code Playgroud)
更新以下 Ed 的注释:
awk '{$1=$1}1' OFS='NNNNN' RS='' file
Run Code Online (Sandbox Code Playgroud)
输出:
简NNNNNSallyNNNNNN约翰NNNNN吉姆
请参阅:8 个强大的 Awk 内置变量——FS、OFS、RS、ORS、NR、NF、FILENAME、FNR
在每个 UNIX 机器上的任何 shell 中使用任何 awk,并且一次只将一行读入内存(而不是整个文件):
$ awk '{printf "%s%s", ors, $0; ors="NNNNN"} END{print ""}' file
JaneNNNNNSallyNNNNNJohnNNNNNJim
Run Code Online (Sandbox Code Playgroud)