0

I have a command:

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*

But when i use the below:

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

Its not giving me any output!!

As you can see there is a space between Sep and 26 and i am using the same space in regex to match the string "Sep 26". could nybody pls help?

I am expecting output to be:

-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*
Vijay
  • 65,327
  • 90
  • 227
  • 319
  • What output did you expect it to produce? – Fred Foo Sep 26 '11 at 11:39
  • I am surprised to see a downvote!!!i think the question is very clear.I am trying to search fro files whose date is Sep 26..I am expecting the output to be only files whose date with 'ls -l' is Sep 26.Downvoter.Pls dare to comment. – Vijay Sep 26 '11 at 11:47
  • Don't you need quotes around the `"d1 d2"`? – AlG Sep 26 '11 at 11:57
  • I have tried "d1 d2".This will actually search for sting "d1 d2" but not for "Sep 26" – Vijay Sep 26 '11 at 12:06

2 Answers2

0

Assuming user and group names don't contain spaces, here's the Awk way of doing this:

ls -l | nawk -v d1=Sep -v d2=26 '{if(match($6, d1) && match($7, d2)) print $0}'
# NOTE                                 ----^^           ----^^
Fred Foo
  • 355,277
  • 75
  • 744
  • 836
  • I already tried this before posting this question.And it works too.My actual need is how do i match a space with two shell variables insdie awk in just one match function. – Vijay Sep 26 '11 at 12:10
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*
Kent
  • 189,393
  • 32
  • 233
  • 301
  • Cool..Thanks a million kent.It worked.Actually i tried this But the problem with mine was d1' 'd2.Somehow it did not work – Vijay Sep 26 '11 at 12:19
  • @Rahul, it did not work because you are using single quotes to enclose your awk script: you need awk to see the double quotes – glenn jackman Sep 26 '11 at 13:41