2013-02-22 4 views
2

Это часть сценария bash Я хочу сделать что-то для каждой строки, которая не заканчивается числом. Я не знаю, как ссылаться на последний символ каждой строки., если последний символ строки [0-9]

if lastchar != [0-9] 
    awk blahblahblah 
else 
    awk blagblag 

ответ

3

ли фильтр в awk:

awk '/[0-9]$/{ blahblahblah } !/[0-9]$/ {blagblag}' 
+0

Это прекрасно, это компенсирует мою некомпетентность в сценариях bash! благодаря –

2
#!/bin/bash 

while read line; do 
    [[ $line =~ [0-9]$ ]] || awk blah 
done < file.txt 

Или:

#!/bin/bash 

while read line; do 
    if [[ $line =~ [0-9]$ ]]; then 
     awk blah 
    else 
     awk anotherblah 
    fi 
done < file.txt 

=~ является оператором regex в bash

+0

Это, похоже, не работает. Вероятно, я ошибался. #!/bin/sh для файла в $ *; do при чтении строки; do [[$ line = ~ [0-9] $]] || sed 's/$/| /' done

+0

Это только 'bash', и это ваш собственный тег dude =) Так что' #!/bin/bash' –

+0

#!/bin/bash при чтении строки; do [[$ line = ~ [0-9] $]] || sed 's/$/| /' done

1

Мне нравится случай для этого в большинстве случаев:

case "$line" in 
    *[0-9]) awk blahblahblah ;; 
    *) awk blagblag ;; 
esac 

Но если вы звоните AWK в любом случае, то чистый AWK ответ, вероятно, лучше всего. (Если у вас нет шагов, которые вы не показали, что должно быть сделано.)

0

Ни один из других ответов не явно говорил об этом:

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

A regular expression, чтобы соответствовать схеме: line ends in number могут быть построены с использованием [0-9]$ [соответствовать что-нибудь между 0 и 9, с последующим end-of-line ($ является end-of-line anchor)].

Анкер для beginning-of-line: ^.

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