Удаление новой строки из середины ряда данных - PullRequest
0 голосов
/ 23 января 2020

Я попробовал следующее, которое не сработало. Файл не имеет разделителей полей. Это фиксированная ширина. Мне все равно, если я использую awk или sed. Новая строка в столбце 50. Я также пробовал столбец 49. Любая помощь будет принята с благодарностью.

awk '{ gsub(/\n,"", $50); print } ' newsqtp160 > UPD_newsqtp16  
awk '{ gsub(\n,"", $50); print } ' newsqtp160 > UPD_newsqtp16
awk '{gsub(/\\n/, "", $49); print}' newsqtp160 > UPD_newsqtp16
sed 's/\n//50' newsqtp160 > UPD_newsqtp16

1 Ответ

1 голос
/ 23 января 2020

Вы можете подумать об этой проблеме в другом ракурсе вместо замены новой строки, используя 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
...