我如何在一个匹配函数中匹配awk中的两个shell变量的空间

时间:2011-09-26 11:33:10

标签: shell unix awk solaris nawk

我有一个命令:

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}'

它没有给我任何输出!!

正如您所看到的,在9月到26日之间有一个空格,我在正则表达式中使用相同的空格来匹配字符串“Sep 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 :(得分:0)

假设用户名和组名不包含空格,这是执行此操作的Awk方法:

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

答案 1 :(得分:0)

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*