Поиск значений в 2 столбцах от CSV

Я думаю, что необходимо будет работать, делают с некоторыми дополнительными опциями указать местоположение, где программное обеспечение будет установлено, вероятно, где-нибудь в домашней папке. Вам, возможно, также придется исключить части установки, которые делают вещи как маркировка демонов, чтобы быть выполненными на системном запуске, так как Ваш пользователь не сможет сделать это.

make prefix=/home/username/my_postgres install

Посмотрите, что документация для делает для некоторых более общих ценностей, которые можно установить.

5
09.09.2016, 14:18
3 ответа

Если awk не доступно, можно сделать это с cut, grep и wc:

$ echo -e 'a,b, c,d\na,val1 ,val2,c' \
   | cut -d ',' -f2,3 | grep '^ *val1 *, *val2 *$' | wc -l

Принятие , как разделитель (и не так или иначе вышел , включен) во входе. Для тестирования столбцы 2 и 3 используются вместо 14 и 15.

Обратите внимание что grep шаблон позволяет запаздывать пробел после/прежде чем значений (можно удалить * подшаблоны, если Вы не хотите это). Метасимволы ^ и $ соответствуйте началу и концу строки.

Канал grep "Value1" | grep "Value2" от Вас вопрос не делает то, что Вы указываете - он соответствовал бы слишком много, например:

    ..., Value1Value2, , ...
    ..., Value1, Value2, ...
    ..., OtherValue1, Value2, ...
    ...

Если awk доступно (это довольно стандартно), можно сделать это как это:

$ echo -e 'a,b, c,d\na,val1,val2,c' \
    | awk -F, '$2 == "val1" && $3 == "val2" {++sum} END {print sum}'

awk автоматически пробел обрезок от значений. END особенно шаблон, который соответствует после того, как все строки обрабатываются.

1
27.01.2020, 20:40

awk могло быть более полезным здесь.

Например:

$> echo "a b c d e" | awk '$2=="b" && $3=="c" {print}'
a b c d e

$> echo "a b c d e" | awk '$2=="a" && $3=="c" {print}'

$> echo "a b c d e" | awk '$2=="b" && $3=="d" {print}'

Так ответьте на свой вопрос, мог быть:

awk '$14=="VALUE1" && $15=="VALUE2" {print}'

4
27.01.2020, 20:40
  • 1
    , я сожалею, но awk не установлен. Я зарегистрирован, поскольку удаленный пользователь и устанавливающий awk не возможен. –  Ebbu Abraham 18.02.2012, 11:54
  • 2
    @Ebbu, затем необходимо добавить к вопросу, какую систему Вы используете. Это awk не доступно, кажется немного необычным. –  maxschlepzig 18.02.2012, 12:19
  • 3
    awk должен всегда быть доступным на Unix (как должен быть vi, вопреки жемчугу, Python и emacs). Это - часть Спецификации Unix начиная с POSIX (1991). Посмотрите их для получения дополнительной информации: en.wikipedia.org/wiki/Single_UNIX_Specification std.dkuug.dk/jtc1/sc22/open/n2972.pdf –  jfg956 18.02.2012, 14:37

Следующая функция будет использовать только Bash, чтобы сделать то, что Вы хотите:

foo () 
{ 
    local filename="$1";
    while IFS=, read -ra arr; do
        if [[ "${arr[13]}" = "VALUE1" && "${arr[14]}" = "VALUE2" ]]; then
            printf '%s\n' "${arr[13]}" "${arr[14]}";
        fi;
    done < "$filename"
}

Использование: нечто [/path/to/file.txt]

Демонстрационный вывод:

rany$ cat > source.txt 
a,a,a,a,a,a,a,a,a,a,a,a,a,VALUE1,VALUE2
a,a,a,a,a,a,a,a,a,a,a,a,a,NOMATCH1,NOMATCH2
a,a,a,a,a,a,a,a,a,a,a,a,a,VALUE1,VALUE2

rany$ foo source.txt
VALUE1
VALUE2
VALUE1
VALUE2
0
27.01.2020, 20:40

Теги

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