Хотя архитектура является тем же, и это сообщение обычно указывает, что двоичный файл для внешней архитектуры, реальное значение этого сообщения состоит в том, что это связано против несовместимой библиотеки времени выполнения C.
См. это сообщение на Linux С нуля веб-сайт. В его случае, обновляющем glibc, дал ему эту ошибку для нескольких (но не все) команды.
Необходимо будет установить надлежащую библиотеку времени выполнения C, которая соответствует двоичному файлу, или получите двоичный файл, который соответствует библиотеке времени выполнения C.
Это сделает то, что я думаю, что Вы просите. Это собирает все значения из 4-го столбца и затем для всех строк в файле и всех значений, замеченных на четвертом столбце, это распечатает строку, если какое-либо из 4-х значений будет между значениями на строке.
perl -lane '$want{$F[$#F]}++; foreach $wanted (keys(%want)){
if($wanted > $F[1] && $wanted < $F[2]){print "@F[0..2]"}
}' file
A 1 10
C 100 1000
D 1000 10000
Однако как Вы видите выше, это не производит вывод, который Вы показываете. Это печатает строку C
потому что 100 <120 <1000 и это не печатает строку E, потому что ни одно из значений 4-го столбца не между 10 000 и 100000.
-a
переключатель к perl
заставляет его автоматически разделить входной файл на поля на пробеле и сохраняет поля как массив @F
. Так, я сохраняю последнее поле ($F[$#F]
) в %wanted
хеш, и для каждой строки, я прохожу ключи хеша, который я имею до сих пор и печатаю 1-е через 3-и поля (@F[0..2]
) из строки, если какой-либо из них между значениями.
Обратите внимание, что это не будет работать, если Ваш файл не будет заказан, если бы одни из 4-х номеров столбцов могут появиться после строки он удовлетворил бы. Если это может произойти, необходимо считать файл дважды, что-то вроде этого:
perl -le 'open(A,"$ARGV[0]"); while(<A>){@F=split(/\s+/); $want{$F[$#F]}++};
open(A,"$ARGV[0]"); while(<A>){@F=split(/\s+/);
foreach $wanted (keys(%want)){
if($wanted > $F[1] && $wanted < $F[2]){print "@F[0..2]"}
}} ' file
Или, можно использовать ответ @Stephane, который также читает файл дважды.
awk 'NR == FNR {if (NF >= 4) a[$4]; next}
{for (i in a) if (+i >= $2 && +i <=$3) {print $1, $2, $3; next}}' file file
что-то вроде этого?
awk '$4 <= $3 && $4 >= $2' data
A 1 10 5
без 4-го столбца:
awk '($4 <= $3 && $4 >= $2){print $1,$2,$3}' data
A 1 10
" "
между печатными полями просто запишите {print $1,$2,$3}
.
– terdon♦
10.02.2014, 17:10