Вы можете подумать об этой проблеме в другом ракурсе вместо замены новой строки, используя gsub
или sed * s/.../
.
. Вы уже сказали нам, что в вашем файле есть строки фиксированной ширины, если есть пунктирная линия, ее длина должна быть меньше «фиксированной» ширины, независимо от того, находится ли разрыв строки в 50-м или 49-м столбце. Таким образом, вы можете просто сделать:
awk -v n="FIXED_LENGTH" '{s=s $0}length(s)==n{print s;s=""}' file
По существу, вышеприведенная строка делает:
Если длина строки == фиксированной ширины, распечатайте ее, в противном случае соедините со следующей строкой и следующая строка и следующая ... пока она не достигнет фиксированной ширины.
Тест
Давайте рассмотрим небольшой тест:
Здесь значение fixed_width равно "4".
kent$ cat f
1234
1234
12
34
1234
1
2
3
4
1234
kent$ awk -v n="4" '{s=s $0}length(s)==n{print s;s=""}' f
1234
1234
1234
1234
1234
1234