Bash - Как найти строку из одного файла как часть строки из другого файла? - PullRequest
0 голосов
/ 14 мая 2018

У меня есть два файла:

1.txt

/stackoverflow.com/questions
/stackoverflow.com/reports
/stackoverflow.com/answers

2.txt

/stackoverflow.com/questions/18959800/grep-each-line-from-a-file-in-another-file
/stackoverflow.com/answers/18984800/grep-each-line-from
/stackoverflow.com/questions/20559800/line-from-a-file-in-another-file
/stackoverflow.com/ask/9959800/file-in-another-file-second_line

Если строка из 1.txt является частью строкиз 2.txt выведите эту строку.Если строки из 2.txt не совпадают, выведите эти строки.

Я хотел бы получить файл output.txt, подобный следующему:

output.txt:

/stackoverflow.com/questions/
/stackoverflow.com/reports/
/stackoverflow.com/answers/
/stackoverflow.com/ask/9959800/file-in-another-file-second_line

возможно иметь все строки в одном файле:

/stackoverflow.com/questions
/stackoverflow.com/reports
/stackoverflow.com/answers
/stackoverflow.com/questions/18959800/grep-each-line-from-a-file-in-another-file
/stackoverflow.com/answers/18984800/grep-each-line-from
/stackoverflow.com/questions/20559800/line-from-a-file-in-another-file 
/stackoverflow.com/ask/9959800/file-in-another-file-second_line

1 Ответ

0 голосов
/ 14 мая 2018

РЕДАКТИРОВАТЬ: Поскольку OP добавил, что строки из предыдущего Input_file тоже нужны, поэтому отредактировал решение следующим образом.

awk 'FNR==NR{a[$0]=$0;next} {for(i in a){if(match($0,a[i])){print substr($0,RSTART,RLENGTH);b[i]=i;next}};print;} END{for(k in a){if(b[k]==""){print a[k]}}}' 1.txt 2.txt

Теперь добавляем не-лайнерную форму решения.

awk '
FNR==NR{
  a[$0]=$0;
  next}
{
  for(i in a){
    if(match($0,a[i])){
      print substr($0,RSTART,RLENGTH);
      b[i]=i;
      next}};
    print}
END{
  for(k in a){
    if(b[k]==""){
      print a[k]}}
}
' 1.txt 2.txt

Не могли бы вы попробовать и сообщите мне, поможет ли это вам.

awk 'FNR==NR{a[$0]=$0;next} {for(i in a){if(match($0,a[i])){print substr($0,RSTART,RLENGTH);next}};print}' 1.txt 2.txt
...