bash - объединить при чтении с grep и вырезать - PullRequest
0 голосов
/ 21 апреля 2020

Я хочу изменить свой существующий скрипт bash. Вот как это выглядит сейчас:

#! /bin/bash    
SAMPLE = myfile.txt

while read SAMPLE
do
    name = $SAMPLE
    # some other code
done < $SAMPLE

В этом случае 'myfile'.txt состоит только из одного столбца со всей необходимой мне информацией.

Теперь я хочу изменить этот скрипт потому что «myfile.txt» теперь содержит больше столбцов и больше строк, чем мне нужно.

grep 'TEST' myfile.txt | cut -d "," -f 1

дает мне нужные мне значения. Но как я могу интегрировать это в мой bash скрипт?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Вы можете направить вывод любой команды в while read l oop.

Попробуйте это:

#! /bin/bash    
INPUT=myfile.txt

grep 'TEST' $INPUT | 
cut -d "," -f 1 | 
while read SAMPLE
do
    name=$SAMPLE
    # some other code
done
0 голосов
/ 21 апреля 2020

Вы должны изменить разделитель входного поля (IFS), который сообщает read, где разбить строку ввода. Затем вы говорите read прочитать два поля: то, которое вам нужно, и то, которое вас не волнует.

#! /bin/bash    
SAMPLE=myfile.txt

while IFS=, read SAMPLE dontcare
do
    name="$SAMPLE"
    # some other code
done < <(grep TEST "$SAMPLE")

Кстати: всякий раз, когда вы используете read, вы должны рассмотреть возможность использования опции -r.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...