2012-10-13 3 views
0

친애하는 모두! 나는 ipython으로 질문을 찾는다.ipython은 awk에서 잘못 작동합니까?

내가 입력

!ls -l | awk '{print $$1}' 

그것은 나에게 준다 그러나

drwxr-xr-x 2 ckivip ckivip 4096 Oct 11 20:38 Desktop 

drwxr-xr-x 6 ckivip ckivip 4096 Oct 11 22:57 Documents 

drwxrwxr-x 3 ckivip ckivip 4096 Oct 11 12:53 Downloads 

drwxr-xr-x 6 ckivip ckivip 4096 Sep 29 18:22 Epigenetics 

drwxr-xr-x 2 ckivip ckivip 4096 Sep 20 14:59 Music 

drwxr-xr-x 23 ckivip ckivip 4096 Oct 10 11:02 Pictures 

drwxr-xr-x 8 ckivip ckivip 4096 Sep 20 15:21 Project 

drwx------ 5 ckivip ckivip 4096 Sep 25 21:31 R 

drwxr-xr-x 5 ckivip ckivip 4096 Oct 9 19:23 Share 

, 내가 입력

!ls -l | awk '{print $1}' 

그것은 저를 제공합니다

drwxr-xr-x 

drwxr-xr-x 

drwxrwxr-x 

drwxr-xr-x 

drwxr-xr-x 

drwxr-xr-x 

drwxr-xr-x 

drwx------ 

"$"기호가 너무 귀찮습니다. 그리고 가장 못생긴 점은 파이썬에서 변수를 'awk'함수를 사용할 때 '$'를 사용하여 쉘로 전송할 수 없다는 것입니다. 어떻게 처리 할 수 ​​있습니까?

+0

IPython은'$ var'을 사용하여 파이썬 변수를 명령에 넣을 수있게하므로 리터럴'$ '을 명령에 전달하려면이 코드를 두 배로 늘려야합니다. 더 많은 경우에 사용할 수있는'{var} '을 사용할 수도 있습니다. –

+0

첫 번째 상황에서는 이중 $를 사용합니다. 그러나, 그것은 나에게 틀린 대답을 준다. 두 번째 상황에서는 '$'하나만 사용합니다. 그리고 그것은 나에게 옳은 대답을 준다. 왜? @Thomas K – xiuxing

+0

아, 그 전체 비트가'{}'안의 괄호 안에 있고 (유효한 파이썬 표현식이 아니기 때문에) 그대로 전달됩니다. 그래서 두 배로 할 필요가 없습니다. –

답변

0

나는 ipython에 익숙하지 않지만 쉘 변수의 값을 awk에 전달하는 부분을 다룬다 : 당신은 'awk -v variable = value'를 사용한다. 그래서 쉘 변수 "$ 1"을 가지고 있다면 값이 "3"이 포함되어 있는데에 따라 입력의 3 번째 필드를 인쇄 할 AWK하려면, 다음 구문은 다음과 같습니다 당신이 위의이 시도 할 수 너무

awk -v f="$1" '{ print $f }' 

:

!ls -l | awk -v f="$1" '{print $f}' 

또는 셸을 두 배로 늘리면 "$"가 필요합니다.

!ls -l | awk -v f="$$1" '{print $f}' 

희망이 있습니다.

관련 문제