다음과 같은 파일이 있습니다.
AA,A=14,B=356,C=845,D=4516
BB,A=65,C=255,D=841,E=5133,F=1428
CC,A=88,B=54,C=549,F=225
행에 A, B, C 또는 D 값이 없는지 결코 알 수 없습니다. 하지만이 파일을 다음과 같이 변환해야합니다.
AA,A=14,B=356,C=845,D=4516,-,-
BB,A=65,-,C=255,D=841,E=5133,F=1428
CC,A=88,B=54,C=549,-,-,F=225
따라서 누락 된 값이 있으면 -
표시 만하십시오. 내 계획에는 쉽게 구문 분석하기 위해 동일한 수의 열이 있습니다. 나는 awk 솔루션을 선호합니다. 조언이나 도움을 주셔서 감사합니다.
내 첫 번째 시도는 :
awk '{gsub(/[,]/, "\t")}; BEGIN{ FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = "-" }; {print $0}'
하지만 일부 값이 누락되었음을 알 수 있습니다.
편집하다:
내 헤더에서 A, B, C, D, E, F 값이 있음을 알고 있습니다.
$ cat file.txt
AA,A=14,B=356,C=845,D=4516
BB,A=65,C=255,D=841,E=5133,F=1428
CC,A=88,B=54,C=549,F=225
$ perl -F, -le '@k=(A..F);
$op[0]=$F[0]; @op[1..6]=("-")x6;
$j=0; for($i=1;$i<=$#F;){ if($F[$i] =~ m/$k[$j++]=/){$op[$j]=$F[$i]; $i++} }
print join(",",@op)
' file.txt
AA,A=14,B=356,C=845,D=4516,-,-
BB,A=65,-,C=255,D=841,E=5133,F=1428
CC,A=88,B=54,C=549,-,-,F=225
-F,
입력 줄을 분할 ,
하고 @F
배열에 저장-l
입력 줄에서 줄 바꿈을 제거하고 출력에 줄 바꿈을 추가합니다.@k=(A..F);
초기화 @k
와 어레이 A
, B
등등 개까지F
$op[0]=$F[0]; @op[1..6]=("-")x6;
의 @op
첫 번째 요소 @F
와 나머지 6 개 요소로 배열을 초기화합니다.-
@F
배열을 반복합니다. @k
요소가 해당 인덱스의 배열 요소 와 일치하면 =
, 변경 @op
요소print join(",",@op)
구분자로 @op
배열 인쇄,
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다