Удалить LF из определенного столбца с помощью sed

У меня есть файл, содержащий данные, разделенные | .

Пример: (Ввод)

a|b|c|d`LF`
D|e
a1|b1|c1|d1`LF`
d2|e1\n

Вывод: (Удалено LF из 4-го столбца)

a|b|c|dD|e
a1|b1|c1|d1d2|e1\n

Я хочу удалить LF из определенного столбца, используя sed . Можно ли удалить символы LF из определенного столбца.

0
задан 26 November 2020 в 16:55

2 ответа

Я думаю, что ваш входной файл был создан на платформе Windows с окончанием строки CR (возврат каретки);

если вы сделаете cat -e filename.txt , вы увидите что-то подобное (обратите внимание на символ ^ M ):

a|b|c|d^M$
D|e$
a1|b1|c1|d1^M$
d2|e1\n$

для этого вы можете сделать:

CR=$'\r' ; sed -E ":a /${CR}$/ { N; s/\n//; ta; }; s/${CR}//g;" infile.txt
a|b|c|dD|e
a1|b1|c1|d1d2|e1\n

Пусть printf сгенерирует символ возврата каретки с CR = $ (printf% s '\ r') , если ваша оболочка не распознает синтаксис ANSI-C Quоты , например $ '\ r' .

0
ответ дан 3 January 2021 в 22:48

Вы хотите сделать что-то вроде:

#!/usr/bin/awk -f

BEGIN { FS = "|"; OFS = "|"; i=0 }
{
    a[i]=(a[i] ? 
        sprintf("%s%s\n", a[i], $0) : sprintf("%s", $0))

    if(NF!=4) {
        ++i
    }
}
END {
    for(e in a) {
        printf("%s", a[e])
    }
}

И вы запускаете его с помощью -f :

awk -f script.awk text.txt
0
ответ дан 3 January 2021 в 22:48

Другие вопросы по тегам:

Похожие вопросы: