如果该行的值与下一行不同,是否有命令在文本文件中添加新行?

A.T*_*TJE 3 text-processing

我有一个使用 sort -n 排序的文件。但是,为了在 gnuplot 中绘制曲面图,我需要在第一列的不同值的行之间有一个空行。例如

1.0
1.0
1.1
1.1
Run Code Online (Sandbox Code Playgroud)

到:

1.0
1.0

1.1
1.1
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以用 Ubuntu Linux 轻松做到这一点?

Sté*_*las 5

我会写:

awk 'NR > 1 && $0 != last {print ""}
     {print; last = $0}' < your-file
Run Code Online (Sandbox Code Playgroud)

需要注意的是,只要线包括数字,那$0 != last将是一个数字比较,这1.0是相同的11e01.00(尽管不一定为0x1,也与关于小数点的处理提防的语言环境的潜在影响分隔符(1.0 对 1,0))。如果要确保进行词法比较,请将其更改为 $0 "" != last.

根据awk实现,这将强制执行memcmp()(字节到字节的比较)、strcmp()(相同,但不能处理 NUL 字节)、strcoll()(两个字符串是否排序相同)或wcsncmp()(字符到字符而不是字节到字节)比较(如果您的输入仅包含十进制数字和句点字符,则所有这些都应该是等效的)。

如果要强制进行字节到字节的比较,请将语言环境固定为 C:

LC_ALL=C awk 'NR > 1 && $0 "" != last {print ""}
              {print; last = $0}' < your-file
Run Code Online (Sandbox Code Playgroud)

(同样,一些awk实现会阻塞在 NUL 字符上)。