使用字符串分隔符将多行打印为单行

nrc*_*mbs 2 bash sed

我有一个文件,其中每一行都包含一个字符串,如下所示:

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 会更有效?

Cyr*_*rus 5

使用 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

  • 不客气。如果要求使用“NNNNN”连接行而不是连接“单词”,如果行中的文本中有空格,它也会失败。如果你只是设置 `FS='\n'` ,它就会解决这个问题,巧合的是,也解决了 `$1=$1` 问题。 (3认同)

Ed *_*ton 5

在每个 UNIX 机器上的任何 shell 中使用任何 awk,并且一次只将一行读入内存(而不是整个文件):

$ awk '{printf "%s%s", ors, $0; ors="NNNNN"} END{print ""}' file
JaneNNNNNSallyNNNNNJohnNNNNNJim
Run Code Online (Sandbox Code Playgroud)