我有一个使用 sort -n 排序的文件。但是,为了在 gnuplot 中绘制曲面图,我需要在第一列具有不同值的行之间有一个空行。例如
1.0
1.0
1.1
1.1
到:
1.0
1.0
1.1
1.1
有什么办法可以使用 Ubuntu Linux 轻松地做到这一点吗?
答案1
我会这样写:
awk 'NR > 1 && $0 != last {print ""}
{print; last = $0}' < your-file
请注意,只要行由数字组成,那$0 != last
就是数字比较,与or 或or1.0
相同(尽管不一定是 0x1,并且还要注意区域设置对小数分隔符处理的潜在影响(1.0 与 1,0))。如果您想确保词法比较,请将其更改为 .1
1e0
1.00
$0 "" != last
根据awk
实现的不同,这将强制执行memcmp()
(字节到字节比较)、strcmp()
(相同,但不能处理 NUL 字节)、strcoll()
(两个字符串排序是否相同)或wcsncmp()
(字符到字符,而不是字节到字节)比较(如果您的输入仅包含十进制数字和句点字符,则所有这些都应该是等效的)。
如果要强制进行字节到字节比较,请将语言环境固定为 C:
LC_ALL=C awk 'NR > 1 && $0 "" != last {print ""}
{print; last = $0}' < your-file
(同样,某些awk
实现会因 NUL 字符而阻塞)。
答案2
类似的东西可以完成这项工作:
awk 'BEGIN {A=""} {if ($0!=A) { printf "\n%s\n", $0; A=$0} else print $0}'
选择 A 的初始化值时要小心,不要在现有值中