2017-04-04 4 views
-2

내가 처음 4 열을 삭제할 수있는 명령이 있지만, 불행히도 2 번째 열 이름과 4 번째 열 이름이 비슷한 경우 두 번째 열에서 잘릴 것이지만 두 번째 열과 네 번째 열 이름이 같지 않으면 네 번째 열에서 자릅니다. 내 명령에 아무런 문제가 없습니까? 이드롭 4 첫 번째 열

**

awk -F"|" 'NR==1 {h=substr($0, index($0,$5)); next} 
       {file= path ""$1""$2"_"$3"_"$4"_03042017.csv"; print (a[file]++?"": "DETAILS 03042017" ORS h ORS) substr($0, index($0,$5)) > file} 
       END{for(file in a) print "EOF " a[file] > file}' filename 

**

Input: 

Account Num | Name | Card_Holder_Premium | Card_Holder| Type_Card | Balance | Date_Register 
01 | 02 | 03 | 04  | 05 | 06 | 07 


    Output 

_Premium | Card_Holder| Type_Card | Balance | Date_Register 
04 | 05 | 06 | 07 

My desired output: 

Card_Holder| Type_Card | Balance | Date_Register 
05 | 06 |07 
+1

형식 April|May에 두 필드를 일치시킬 수 있다는 것이 공간을 제거하여? 어쩌면 잘못된 스크립트를 게시 했습니까? –

+0

조건을 변경하는 대신 새로운 질문을하는 것이 어떻습니까? –

답변

4

가 당신이하려는 모든?

$ sed -E 's/([^|]+\|){4}//' file 
April | May | June 
05 | 06 | 07 

$ awk '{sub(/([^|]+\|){4}/,"")}1' file 
April | May | June 
05 | 06 | 07 
+0

먼저 열이 처음 4 열에서 드롭되는지 확인하고 싶습니다. @EdMorton – Jiji

+0

@ Jiji : "처음 네 열 삭제"를 의미한다고 가정합니다. 샘플 입력을 기반으로 이러한 명령이 수행하는 작업입니다. – mklement0

+0

@ mklement0 ya 맞아. 하지만 내 두 번째 열과 네 번째 열이 동일 할 경우 문제가 생깁니다 – Jiji

0

색인을 사용하여 열을 제거하는 방법이 잘못되었습니다. 알아 낸 것처럼 이전 필드가 다음 필드와 같은 단어를 포함하고있을 때 인덱스를 혼동하여 이전 필드와 일치시킬 수 있습니다.

올바른 방법은 Ed Morton이 권고 한 방법입니다. 에드 모튼의 제안에 따라

In this online test, 울부 짖는 코드는, 당신이 기대하는 출력을 제공합니다 때문에 당신이 당신의 분야에 포함이 공백에

awk -F"|" 'NR==1 {sub(/([^|]+\|){3}/,"");h=$0;next} \ 
{file=$1$2"_"$3"_"$4"_03042017.csv"; sub(/([^|]+\|){3}/,""); \ 
print (a[file]++?"": "DETAILS 03042017" ORS h ORS) $0 > file} \ 
END{for(file in a) print "EOF " a[file] > file}' file1.csv 

#Output 
DETAILS 03042017 
Card_Holder| Type_Card | Balance | Date_Register 
04  | 05 | 06 | 07 
EOF 1 

를, 생성 된 파일의 파일 이름은 01 02 _ 03 _ 04 _03042017.csv로 나타납니다. 실제 데이터를 사용하면이 파일 이름이 올바르게 표시됩니다.

어쨌든 나는 에드 모튼의 대답을 당신의 코드에 적용한다. 이 솔루션에 만족한다면 Ed Morton의 대답을 받아 들여야합니다.

추신 : 너무 모호한 데이터로 더 잘 작동하는 것으로 보아 Ed Morton 대답에서 공백을 삭제했습니다.

에드 추천 검색어 :

awk '{sub(/([^|]+\|){4}/,"")}1' file 
#Mind this space ^ 

여기이 공간은 각 필드 다음에 공백이없는 경우이 데이터를 잡는 데 실패 할 수 있습니다 (즉이 April|May). 한편

, 에드 솔루션이 제대로 그 awk 스크립트는 4 열을 제거에 관련되는 방법 형식 April | May 또는

+0

@ Edmonton Ed를 잘라냅니다. 코드에서이 여분의 공간을 제거해도 괜찮습니까? –

+0

고맙지 만 OP가 실제 질문이 무엇인지 또는 실제 데이터가 아직 보이지 않았다고 생각하기 때문에 그대로 두십시오. 그의 실제 데이터가 자신의 질문에 현재 표시하고있는 것처럼 보이지 않으므로 답변을 마사지하지 않아도 문제를 해결할 수 있습니다. –

관련 문제