2012-05-12 2 views
2

Это продолжение моего предыдущего вопроса. deleting lines from text files based on the last character which are in another file using awk or sedудаление строк из текстовых файлов, находящихся в другом файле

Я пытаюсь получить следующий результат, используя мой предыдущий пример? Я новичок в awk. Пожалуйста, дайте предложения.

csh 1  A 1  27.704 6.347 
csh 2  A 1  28.832 5.553 
csh 3  A 1  28.324 4.589 
csh 6  A 1  28.378 4.899 

ответ

1

Принимая код из предыдущих ответов, вы можете использовать этот код:

while read word; do 
    if [[ $word =~ ^(....)(.)$ ]]; then 
     filename="yy/${BASH_REMATCH[1]}.txt" 
     letter=${BASH_REMATCH[2]} 
     [[ -f $filename ]] && sed -i.bak -n "/^ *csh.*$letter/p" $filename 
    fi 
done < xx.txt 
+0

Большое спасибо за ваш ответ. Я хотел бы удалить другие строки, начинающиеся с «csh» (в этом, например: удалить другие строки, начинающиеся с «csh», кроме «A») в исходном файле вместо печати. Как я могу изменить свой код? – darwin

+0

В этом, пожалуйста, проверьте мой отредактированный ответ выше. – anubhava

+0

Теперь он не работает. – darwin

1

Вам необходимо перенести любую информацию из предыдущего вопроса, которая предоставляет спецификации для этого.

Это может работать для вас:

awk '$3 == "A"' inputfile 

Вы можете заменить «файл_ввод» с Glob, возможно * для того, чтобы обрабатывать несколько файлов, как если бы они были cat объединены.

Без четкого указания того, как вы хотите обрабатывать несколько файлов, это лучшее, что я могу сделать.

1

Это может работать для вас:

sed '/^ *chs.*A/!d' file 
+0

Этот код не работает. Ваш код в моем предыдущем вопросе работал правильно. Благодарю. – darwin

+0

Если вы хотите вернуться к предыдущему вопросу, тогда: 'sed 's |^* \ (. * \) \ (. \) $ | Sed -i.bak"/^ * csh. * \ 2/! d "yy/\ 1.txt | ' xx.txt | sh' должен соответствовать счету. Нотабене '! 'отрицает условие. – potong

Смежные вопросы