LINUX.ORG.RU

Найти строку в файле и удалить предыдущую перед ней

 ,


0

3

Собственно сабж. Есть csv файл:

Comprehensive Order Report
«Order Type»,«Operating Unit»
«Standard - DIRECT A», «International Business Machines Corporation»
«Standard - DIRECT B», «International Business Machines Corporation»
«Standard - DIRECT C», «International Business Machines Corporation»
«Standard - DIRECT D», «International Business Machines Corporation»

Переодически в качестве первой строки в нём появляется строка Comprehensive Order Report. Необходимо удалить именно её, когда она есть в файле. «Order Type»,«Operating Unit» - название полей и всегда содержатся в файле т.е. можно опираться на них.

Пока вижу решение только двумя способами: 1) найти «Order Type»,«Operating Unit» и вывести их всё что дальше в файле до его конца.
2) найти «Order Type»,«Operating Unit» и удалить всё что выше.

Пробовал использовать sed для этих целей, но ничего не вышло.



Последнее исправление: XaKoN (всего исправлений: 2)
Ответ на: комментарий от someoneelsenotme

Проблема в том, что эта лишняя строка может быть любой, начиная от sdfsfsf32123 и заканчивая Comprehensive Order report. Неизменна только строка с названиями полей «Order Type»,«Operating Unit».

XaKoN
() автор топика
Ответ на: комментарий от XaKoN

Логи большие?

perl -lnE 'BEGIN{$/=0}; say s/\n.*(\n«Order Type»,«Operating Unit»\n)/$1/gr' csv
Deleted
()
 tac file.csv | awk ' { print $0; if ( $0 ~ "Order.*Type.*,.*Operating.*Unit" ) {  getline; } } ' | tac



идешь файл снизу-вверх (tac), отпечатываешь. когда обнаруживаешь искому строку - пропускаешь следующую. командой tac обращаешь результат из снизу-вверх->в нормальный вид.

bl ★★★
()

1) найти «Order Type»,«Operating Unit» и вывести их всё что дальше в файле до его конца.

sed -n '/^"Order Type","Operating Unit"$/,$p'
Jini ★★
()

Огромное всем спасибо за помощь. Ещё получилось сделать вот таким вариантом.

if [ -z «`cat coa_s.csv|head -n1|grep -E 'Order Type.*Operating Unit'`» ];then cat coa_s.csv|tail -n +2 > coa_s4.csv fi 
XaKoN
() автор топика

Есть csv файл
Переодически в качестве первой строки в нём появляется строка Comprehensive Order Report.
Необходимо удалить именно её, когда она есть в файле.

sed -i '/^Comprehensive Order Report/d' file.csv
ArcFi
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.