У меня есть файл с разделителями табуляции в Unix, который имеет проблемы с данными
Я должен убедиться, что каждая строка имеет 4 столбца, но входные данные довольно беспорядочно:
- Первая строка - заголовок.
- Вторая строка действительна, так как имеет 4 столбца.
- Третий также действителен (это нормально, если поле описания пусто)
Поле ID и "Боже, благослови меня" Последний столбец PNumber - это не пустые поля.
Как можно видеть, 4-я строка испорчена из-за символа новой строки в "столбце описания", который охватывает несколько строк.
ID Name Description Phnumber
1051 John 5674 I am doing good, is this task we need to fix 908342
1065 Rohit 9876246
10402 rob I am
doing good,
is this task we need to fix 908341
105552 "Julin rob hain" i know what to do just let me do it
"
"
"
"
"
"
908452 1051 Dave I am doing reporting this week 88889999
Может быть, скриншот поможет увидеть проблему
Каждая строка начинается с цифры и заканчивается цифрой. Каждая строка должна иметь 4 столбца.
желаемый результат
ID Name Description Phnumber
1051 John 5674 I am doing good, is this task we need to fix 908342
1065 Rohit 9876246
10402 rob I am doing good, 563 is this task we need to fix 908341
105552 "Julin rob hain" i know what to do just let me do it 908452
1051 Dave I am doing reporting this week 88889999
Данные являются примерами данных, фактический файл имеет 12 столбцов. да, между столбцами может быть число, и лишь немногие являются полями даты (например, 2017-03-02)
2 ответа
Это сделал трюк
кошка имя_файла | perl -0pe 's/\n(?!([0-9]{6}|$)\t)//g' | perl -0pe 's/\r(?!([0-9]{6}|$)\t)//g' | sed '/^$/d'
awk
в помощь!
Предполагается, что все цифровые поля не отображаются, кроме первого и последнего полей
awk 'NR==1;
NR>1 {for(i=1;i<=NF;i++)
{if($i~/[0-9]+/) s=!s; printf "%s", $i (s?OFS:RS)}}' file
ID Name Description Phnumber
1051 John I am doing good, is this task we need to fix 908342
10423 rob I am doing good, is this task we need to fix 908341
1052 Julin rob hain i know what to do just let me do it " " " " " " 908452
1051 Dave I am doing reporting this week 88889999
возможно установить OFS
в \t
иметь больше структуры