2016-07-20 4 views
1

문자열에서 특정 값을 잘라내려고합니다. 그것의 첫 번째 열에 대한 예상대로 작동하지만 내가 원하는 열을주는 두 번째 열에 대한 노력.두 번째 열의 커팅 명령 문제

코드 및 출력

[psatav]$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f1 
$$JOB_ESTD_TIME1='2016-04-16 00:00:00' 
[psatav]$ echo '$$JOB_ESTD_TIME2'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f2 
'2016-04-16 20:00:00' 

두 번째 명령은 반환해야합니다 : -

$$JOB_ESTD_TIME2='2016-04-16 20:00:00' 
+1

nopes을해야 할 것입니다, 그렇지 – dnit13

+0

dnit13 @한다 : - 나는 무엇을 놓치고 있어요? 어떻게 제 1 칼럼과 제 2 칼럼을 위해 잘 작동하는지. 나는 원하는 출력을 언급했다. 그 때 명령에 어떤 변화가 필요합니까? –

+0

@PravinSatav :'-f1'과'-f2'는 이런 식으로 동작합니다. de-limiter가 만나 자마자 바로 앞뒤에 값을 출력합니다. 그래서 '$ 20 JOB_ESTD_TIME2 ='는'-f2'를 사용할 때''2016-04-16 20 : 00 : 00' '만이 그것의 일부분이기 때문에 손실됩니다 – Inian

답변

2

당신이 $$JOB_ESTD_TIME1='2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'

$$JOB_ESTD_TIME1='2016-04-16 00:00:00' 

인하 및 F2 것이 '2016-04-16 20:00:00'

만 잘라 F1 위해 이렇게 절단이 전체 문자열을 통과하고있는 당신은 AWK와 스틱을 사용하지 않으려면 여기 절단하는 것은 당신이

echo '$$JOB_ESTD_TIME2'=$(echo "'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f2) 
$$JOB_ESTD_TIME2= '2016-04-16 20:00:00' 

echo '$$JOB_ESTD_TIME2'=$(echo "'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | cut -d'|' -f1) 
$$JOB_ESTD_TIME2='2016-04-16 00:00:00' 
+0

^좋은 방법! – Inian

+0

저를 위해 일합니다. 또한 문제가 무엇인지 알아 냈습니다! –

1

먼저 | 전에 모든 것을 절감하고 필요한 출력을 인쇄 cut-f1|로 따라서 대한 구분 기호를 설정합니다.

하지만 -f2은 첫 번째와 두 번째 사이의 데이터를 자르며, 이는 현재 받고있는 것입니다. =에 구분 기호

bash-4.1$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F"=" '{ 
split($2,a,"|"); print $1,"=",a[1]}' 
$$JOB_ESTD_TIME1 = '2016-04-16 00:00:00' 
bash-4.1$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F"=" '{ 
split($2,a,"|"); print $1,"=",a[2]}' 
$$JOB_ESTD_TIME1 = '2016-04-16 20:00:00' 
  • -F"=" 인수 세트를 따라서 $1$$JOB_ESTD_TIME1가 포함됩니다

    당신은 당신의 필요한 출력을 얻을 수 awk 명령 아래에 사용할 수 있습니다.

  • split 함수는 의 데이터를 = 다음에 나눕니다. 배열 a에 저장합니다.
  • print은 배열에서 필수 필드 인 을 인쇄합니다.
3

당신의 영업 이익의 cut 명령은이 방법으로 같은 multiple delimitersawk를 사용할 수있는, 그런 식으로 작동하지 않습니다 : -

awk -F'[=|]' '{gsub(/ /, "", $2); printf "%s=%s\n", $1, $2}' 
awk -F'[=|]' '{gsub(/ /, "", $3); printf "%s=%s\n", $1, $3}' 

를 귀하의 경우를 들어,

$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F'[=|]' '{ gsub(/ /, "", $2);printf "%s=%s\n", $1, $2 }' 
$$JOB_ESTD_TIME1='2016-04-16 00:00:00' 

$ echo '$$JOB_ESTD_TIME1'="'2016-04-16 00:00:00' | '2016-04-16 20:00:00'| '2016-04-17 08:00:00'" | awk -F'[=|]' '{ gsub(/ /, "", $3);printf "%s=%s\n", $1, $3 }' 
$$JOB_ESTD_TIME1='2016-04-16 20:00:00' 

화이트 공간 printf에 전달하기 전에 각 입력란에서 gsub을 사용하여 제거됩니다.

관련 문제