Рейтинг:-6

Как написать скрипт, который печатает каждую строку файла, не содержащуюся в другом файле? (Баш-скрипт)

флаг us

например, у меня есть 2 текстовых файла:

файл1 состоит из:

а 
б
бб
копия

файл2 состоит из:

аа
До нашей эры
аб

вывод должен быть:

$p1.sh файл1 файл2 
бб
копия

$p1.sh файл2 файл1
аа
До нашей эры
аб

как мне написать этот скрипт bash? Я писал что-то вроде этого, но это не сработало:

#!/бин/баш

кот "$1" | пока читал м  
делать
    grep -f -v "$m" "$2"
сделано | сортировать -у

любой вид руководства будет оценен! Я начинающий программист и не имею опыта написания скриптов. Спасибо!

флаг hu
Отвечает ли это на ваш вопрос? [Как мне написать сценарий bash, который печатает каждую строку одного файла также и во втором файле] (https://askubuntu.com/questions/1362883/how-do-i-write-a-bash-script-that-prints -каждая-строка-одного-файла-также-во-вторых-f)
nl34 avatar
флаг us
@mikewhatever К сожалению, нет, эта ссылка смотрит на общие строки, но здесь я пытаюсь напечатать необычные строки. Совершенно противоположная задача! :)
bac0n avatar
флаг cn
`-f ` принимает файл в качестве аргумента. Файл на самом деле представляет собой список шаблонов (по одному шаблону в строке). Если вы пытаетесь найти буквальное совпадение, вы также должны добавить `-F`.
флаг hu
Это домоседки? Какое это имеет отношение к Ubuntu?
NotTheDr01ds avatar
флаг vn
Я дал вам сочувствие, но я начинаю понимать, почему он получил так много отрицательных голосов. * Вы * задали противоположный вопрос несколько дней назад, вы не ответили «зачем» вам это понадобится ни разу (что привело нас к мысли, что вы хотите, чтобы мы сделали вашу домашнюю работу за вас), а второй ответ был предоставлен на вашем другом Вопрос просто требует изменения одного флага, чтобы (подсказка) инвертировать ответ, который вы сможете найти, если пробовали этот ответ, и `man grep`, чтобы увидеть варианты. Если это не вопрос домашнего задания, это проблема XY[https://meta.stackexchange.com/q/66377/902710].
Рейтинг:0
флаг cn

Я думаю, вам нужно использовать команды sort и comm для этой работы. Например:

comm -23 <(сортировка -u файл1.txt) <(сортировка -u файл2.txt) > файл3.txt

Я оставлю вам возможность поиграть с флагами подавления (-1,-2,-3) для достижения желаемого результата. Я использовал -23 в качестве примера.

Другой, возможно, более простой способ — использовать awk следующим образом:

awk 'FNR==NR{lines[$0]=1;следующий} !($0 в строках)' файл1 файл2

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.