Как я могу свернуть эту командную строку bash в оператор awk? - PullRequest
2 голосов
/ 02 октября 2009

Я создал скрипт awk и использую его так:

# grep -E "[PM][IP][DO][:S]" file.txt | awk-script

Как я могу изменить скрипт awk, включив в него усилие команды grep (которая ищет «PID:» или «MPOS»?

awk-скрипт:

#!/usr/bin/awk -f
/Sleeve/  {
        printf("%8d, %7d, %7.2f, %7.2f, %7.2f\n", $5, $6, $7, $30, $31)
}
/Ambient/ {
        printf("%8d, %7d,,,, %7.2f, %7.2f\n", $5, $6, $7, $8)
}
/MPOS:/ {
        printf("%8d, %7d,,,,,, %5d, %5d\n", $4, $5, $2, $3)
}

Ответы [ 2 ]

2 голосов
/ 02 октября 2009

Я попытался ответить Литб в busybox (на Ubuntu в Bash), и это сработало для меня. Для тестирования я использовал следующий шебанг, чтобы сопоставить, где у меня есть символические ссылки на busybox:

#!/home/username/busybox/awk -f

И запустил тест, используя:

./awk-script file.txt

Я также запустил тест под busybox shPATH=/home/username/busybox:$PATH, хотя для этого не нужно), и он работал там.

Когда вы говорите: «У меня все еще есть горе». что это значит? Вы получаете сообщения об ошибках или неверные результаты?

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

grep -E "(PID:|MPOS)" file.txt
2 голосов
/ 02 октября 2009

Если вы просто хотите найти PID: или MPOS, вы можете сказать, что если вы не не нашли их в строке, вы должны пропустить следующие правила:

#!/usr/bin/awk -f

!/PID:|MPOS/ { 
        next 
}

/Sleeve/  {
        printf("%8d, %7d, %7.2f, %7.2f, %7.2f\n", $5, $6, $7, $30, $31)
}
/Ambient/ {
        printf("%8d, %7d,,,, %7.2f, %7.2f\n", $5, $6, $7, $8)
}
/MPOS:/ {
        printf("%8d, %7d,,,,,, %5d, %5d\n", $4, $5, $2, $3)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...