LINUX.ORG.RU

Ну, если ты сможешь определить, как их различить,.. то и сам догадаешься, как их можно удалить..

MiracleMan ★★★★★
()
Ответ на: комментарий от MiracleMan

$pattern="строчка из file-1.txt" (то, что нужно удалить)

sed "/^$pattern\$/d" "file-2.txt" (удаление)

ВОПРОС: КАК последовательно забирать строчки из file-1?

for i in `cat file-1 | awk '{ print $0 }'; do echo $i; done; не дает нужного результата, строки в файле с пробелами.

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

есть идея вызывать sed непосредственно из awk

cat 1.txt | awk '{ print "--[ " $0 " ]---"; system(" sed \"/ " $0 " /d\" /home/guest/bin/tmp/2.txt "); }

но что-то похоже в sed передается не то...

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

cat 1.txt | awk '{ print "--[ " $0 " ]---"; system(" sed -e \"/"$0"/d\" /home/guest/bin/tmp/2.txt > /home/guest/bin/tmp/55.txt "); }'

вроде такое должно работать, но тоже никак

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

>ВОПРОС: КАК последовательно забирать строчки из file-1?

Да вот так, хотя бы -

#!/bin/sh lines=`wc -l $1 | awk '{print $1}' ` sed "$lines,$ d" $1

MiracleMan ★★★★★
()
Ответ на: комментарий от MiracleMan

человеку не паттерн нужен...

автоматически, как сделать - не разбирался.

А вручную - копируем в новый файл, тот, строки которого нужно
удалить. Ставим разделитель - например, длинную строку минусов.
Добавляем к нему второй файл. А потом - удаляем дублирующиеся строки, например, пропускаем это всё через deldup:
=== cut ===
#!/usr/bin/perl -w

use strict;

my %hash;

while(<>)
{
        next if $hash{$_};
        $hash{$_} = 1;
        print $_;
}
=== cut ===

А потом ручками вырезаем начало результата до нашего разделителя.

Т.е.:

cp file1.txt file-tmp.txt
echo ----------------------------------- >> file-tmp.txt
cat file2.txt file-tmp.txt
cat file-tmp.txt|deldup > file-tmp2.txt
mcedit file-tmp2.txt

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Да неужели? А ты читал вышеизложенное? Именно этими понятиями человек и оперировал..

Я полагаю, не составит затруднения, к примеру, в цикле, организовать чтение строк из одного файла с последующим удалением их в другом, или переносом ещё куда..

Ещё, из вышеизложенного я понял, что человек желал бы это организовать средствами shell, и вспомогательными, awk, grep, sed etc...

А так да, конечно, мне к примеру, сначала сразу же пришла на ум мысль кинуть в качестве примера код на C-ях.. Ну вот, тобой использованный perl неплох, на python это удобно делать, ruby..

Давай ка лучше предоставим человеку самому решать, что и как ему лучше и надо.. Хорошо?

MiracleMan ★★★★★
()
Ответ на: комментарий от MiracleMan

Да мне тоже на Перле не сложно сделать, но не хочется ради одно скрипта тянуть кучу тяжеловесов. Ядрышки компактные. Вот и приходится обходиться минимальным набором.

Читаю руководства, думаю дальше =)

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

>Я полагаю, не составит затруднения, к примеру, в цикле, организовать чтение строк из одного файла с последующим удалением их в другом, или переносом ещё куда..

Конечно, не составит. Только это делается не за минуту, как с выгеприведённым "скриптом" (вообще, удаление дублирующихся строк в файле строк - задача у меня встречающася очень часто), а минут за 5.

А человек - может не знать ни перла, ни питона, ни, тем более, Си.

>Давай ка лучше предоставим человеку самому решать, что и как ему лучше и надо..

А я где-то решал за него? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от MiracleMan

От как надо! Ура, заработало. Спасибо за идею!
( $1 - это те строчки, которые нужно выкинуть из $2 )


#!/bin/sh

lines=`wc -l $1 | awk ' { print $1 } '`

i=0;

RESULT=/home/guest/bin/tmp/result;
TMP=/home/guest/bin/tmp/result.tmp;
cp "$2" "$RESULT";

while [ $i -lt $lines ]
do
  i=$(($i+1));
  echo -n "line $i: ";
  line=`sed "$i!d" $1`;
  echo $line;
  res=`sed "/$line/d" "$RESULT" > "$TMP"`;
  mv "$TMP" "$RESULT";
done

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

Да, всегда пожалуйста.. ;-) Ты же сам всё и сделал.. ;-)

MiracleMan ★★★★★
()
Ответ на: комментарий от anonymous

только что увидел. не всегда за консолью, пишите на мылою

boatman
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.