how do i match a space with two shell variables inside awk in just one match function
Domanda
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*
Soluzione
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*
Altri suggerimenti
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 ----^^ ----^^
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow