Печатать подмножество строк из файла на основе столбца, попадающего в диапазоны второго файла

Функция оболочки. Это будет работать в любой оболочке, которая поддерживает строки <<<здесь -, включая zsh и bash.

xyz() { 
    while read line
    do 
        printf "%s " "$line"
        "$@" <<<"$line"
    done
}

$ (echo "foo"; echo "bar") | xyz rev
foo oof
bar rab
0
03.12.2021, 11:48
1 ответ

Используя python, мы сначала создаем список объектов диапазона из файла 2.txt и сохраняем его в переменной LoR. Идея состоит в том, чтобы проверить наличие целевого поля, если file1.txt (в нашем случае целевое поле второе ).

python3 -c 'import re, sys

## unpack command line arguments
if1,if2,col = sys.argv[1:]

idx = int(col) - 1
fx = lambda x: n in x
d2u = re.compile(r"\r?\n")

with open(if1) as f1, open(if2) as f2:
  LoR = [range(int(a),1+int(b))
    for _ in f2
    for l in [re.sub(d2u,"",_)]
    for a,b in [l.split()]]

  for l in f1:
    _ = re.sub(d2u,"",l)
    F = _.split()
    if len(F) < int(col): continue
    n = int(F[idx])
    if any(filter(fx,LoR)):
      print(_)
' file1.txt file2.txt 2

Тот же подход, что и выше, но с Perl:

perl -MList::Util=any -lane '
BEGIN {
  @LoR = map { [/(\S+)\s+(\S+)/] } <STDIN>;
  $idx = -1+pop;
}
s/\r$//; 
my $n = $F[$idx];
print if any { $_->[0] <= $n and $n <= $_->[1] } @LoR;
' file1.txt < file2.txt 2
0
04.12.2021, 04:23

Теги

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