эхо удаление символов обратной косой черты - PullRequest
2 голосов
/ 06 января 2010

Я пытаюсь написать скрипт, который анализирует поля в программе и выводит их на стандартный вывод.

Данные входного файла выглядят так

поле1 поле2

Поля разделены вкладками

Первоначально я пытался написать это в AWK.

cat test.txt | while read line; do entity=`awk -F "\t" '{print $2}'`;echo $entity; done

Это прекрасно работает в командной строке.

Но когда я пытаюсь сделать то же самое в программе оболочки, как показано ниже

while read line
do
        entity=`echo $line|awk -F \t '{print $2}'`
        echo $entity
done<"test.txt"

Причина в том, что echo $ line на самом деле печатает вкладки в виде пробелов. Я не могу использовать пробелы, потому что поля могут содержать пробелы.

Затем я попытался написать, используя cut.

while read line
do
        entity=`echo $line|cut -f5`
        echo $entity
done<"test.txt"

Опять та же проблема с эхом.

Кто-нибудь сталкивался с подобной проблемой. Любое решение, которое вы можете порекомендовать мне.

Спасибо. Bala

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Если у вас есть переменная с вкладками, а затем попробуйте вызвать переменную:

line=$'f1\tf2\tf3'
echo ${line}

То, что происходит, - это то, что оболочка обрабатывает вкладки как разделители аргументов и дает эхо несколько аргументов. эхо само по себе никогда не видит вкладки

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

echo "${line}"

Теперь будет отправлен единственный аргумент с вкладками.

Это означает, что вы должны написать свой скрипт следующим образом:

while read line; do
    entity=$(echo "$line" | awk -F \t '{print $2}')
    echo $entity
done < test.txt
2 голосов
/ 06 января 2010

с ограниченной информацией, попробуйте это

while read -r line
do
        entity=$(echo "$line"|cut -f5)
        echo "$entity"
done<"test.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...