Сравнение и выборка слов в двух столбцах разных файлов

Ваш первый подход работает, вам просто нужно дать командуifne(см.man ifne):

NAME
       ifne - Run command if the standard input is not empty

SYNOPSIS
       ifne [-n] command

DESCRIPTION
       ifne  runs  the  following command if and only if the standard input is
       not empty.

Значит, нужно дать ему команду запуститься. Ты почти у цели, teeсработает:

command | ifne tee myfile > /dev/null

Если ваша команда не производит огромное количество данных, если они достаточно малы, чтобы поместиться в переменную,вы также можете сделать:

var=$(mycommand)
[[ -n $var ]] && printf '%s\n' "$var" > myfile
2
26.09.2021, 10:16
3 ответа

Это awkвам подходит?

awk 'FNR==NR {array[$2]=$0; next} {$0=array[$1]}/./{print}' file2 file1

Выход

$ awk 'FNR==NR {array[$2]=$0; next} {$0=array[$1]}/./{print}' file2 file1
333 ttt
444 kkk
3
26.09.2021, 10:51

Ваш awkтерпит неудачу, потому что вы используете оба поля в качестве ключа, но ваш file1имеет только одно поле, поэтому оба никогда не будут присутствовать в массиве c. Кроме того, вы используете параметр -Fдля указания разделителя полей, но на самом деле его не задаете. Это означает, что разделителем полей будет сам awk-скрипт :

.
awk -F 'script' file

Вот рабочая версия вашей awkпопытки:

$ awk  'NR==FNR{c[$1]++;next};c[$2] ' file1 file2
333 ttt
444 kkk

А вот более эффективная версия, которая не использует больше памяти, чем необходимо:

$ awk  'NR==FNR{c[$1]}; $2 in c' file1 file2 
333 ttt                 
444 kkk   

Ваш joinтакже неправильно использует опцию -t. Как и в случае с -Fиз awk, -tтакже принимает аргумент, а вы ему его не даете. Затем joinтребует сортировки ввода. Вот рабочая версия вашего joinподхода:

$ join  -1 1 -2 2 -o 2.1,2.2 <(sort file1) <(sort -k2 file2)
444 kkk
333 ttt
4
26.09.2021, 10:57
#!/usr/bin/python
k1=open('file1','r')
for f1 in k1:
    k2=open('file2','r')
    for f2 in k2:
        if f1.strip() in f2.strip():
            print f2.strip()
~                                  

выход

333 ttt
444 kkk
-1
28.09.2021, 19:30

Теги

Похожие вопросы