как сопоставить пробел с двумя переменными оболочки внутри awk только в одной функции сопоставления - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть команда:

ls -l | nawk -v d1=Sep -v d2=26 '{if(match($0,d1)) print $0}'
-rw-rw-r--   1 nobody   nobody        12 Sep 26 11:36 file1
-rw-rw-r--   1 nobody   nobody        14 Sep 26 11:37 file2
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:46 file3
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:44 file4
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:50 file5
-rw-rw-r--   1 nobody   nobody         0 Sep 26 11:00 file6
-rw-rw-r--   1 nobody   nobody         0 Sep 25 11:00 file7
-rw-rw-r--   1 nobody   nobody         0 Sep 26 14:22 ksh
-rwxrwxr-x   1 nobody   nobody       208 Sep 26 16:31 test.sh*
-rwxrwxr-x   1 nobody   nobody        62 Sep 26 15:15 test2.sh*

Но когда я использую ниже:

ls -l | nawk -v d1=Sep -v d2=26 '{if(match($0,d1 d2)) print $0}'

Это не дает мне никакого выхода !!

Как вы можете видеть, между сентябрем и 26 есть пробел, и я использую то же пространство в регулярном выражении, чтобы соответствовать строке "26 сентября". Может ли кто-нибудь помочь?

Я ожидаю, что результат будет:

-rw-rw-r--   1 nobody   nobody        12 Sep 26 11:36 file1
-rw-rw-r--   1 nobody   nobody        14 Sep 26 11:37 file2
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:46 file3
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:44 file4
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:50 file5
-rw-rw-r--   1 nobody   nobody         0 Sep 26 11:00 file6
-rw-rw-r--   1 nobody   nobody         0 Sep 26 14:22 ksh
-rwxrwxr-x   1 nobody   nobody       208 Sep 26 16:31 test.sh*
-rwxrwxr-x   1 nobody   nobody        62 Sep 26 15:15 test2.sh*

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011
kent$  echo "-rw-rw-r--   1 nobody   nobody        12 Sep 26 11:36 file1
-rw-rw-r--   1 nobody   nobody        14 Sep 26 11:37 file2
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:46 file3
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:44 file4
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:50 file5
-rw-rw-r--   1 nobody   nobody         0 Sep 26 11:00 file6
-rw-rw-r--   1 nobody   nobody         0 Sep 25 11:00 file7
-rw-rw-r--   1 nobody   nobody         0 Sep 26 14:22 ksh
-rwxrwxr-x   1 nobody   nobody       208 Sep 26 16:31 test.sh*
-rwxrwxr-x   1 nobody   nobody        62 Sep 26 15:15 test2.sh*
"|awk -v d1=Sep -v d2=26 'BEGIN{x=d1" "d2}{ if(match($0,x))print $0;}' 

-rw-rw-r--   1 nobody   nobody        12 Sep 26 11:36 file1
-rw-rw-r--   1 nobody   nobody        14 Sep 26 11:37 file2
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:46 file3
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:44 file4
-rw-rw-r--   1 nobody   nobody         0 Sep 26 10:50 file5
-rw-rw-r--   1 nobody   nobody         0 Sep 26 11:00 file6
-rw-rw-r--   1 nobody   nobody         0 Sep 26 14:22 ksh
-rwxrwxr-x   1 nobody   nobody       208 Sep 26 16:31 test.sh*
-rwxrwxr-x   1 nobody   nobody        62 Sep 26 15:15 test2.sh*
0 голосов
/ 26 сентября 2011

Предполагая, что имена пользователей и групп не содержат пробелов, вот Awk способ сделать это:

ls -l | nawk -v d1=Sep -v d2=26 '{if(match($6, d1) && match($7, d2)) print $0}'
# NOTE                                 ----^^           ----^^
...