구분 기호 없이 데이터가 포함된 텍스트 파일에서 csv 파일을 만들어야 합니다.
좋다:
2015021DUMMY001EAN1377689456777678945GERDE0002345
2015031DUMMY002EAN1345647876867867867TURTR0154565
......
bash 또는 sed를 사용하여 각 줄의 모든 x, y 및 z 문자에 세미콜론을 삽입하는 쉬운 방법이 있습니까?
답변1
12자, 32자, 16자 그룹을 사용할 수 있습니다(12+32=44, 44+16=60).
sed 's/\(.\{12\}\)\(.\{32\}\)\(.\{16\}\)/\1;\2;\3/'
귀하의 예제 입력에는 60자가 포함되어 있지 않습니다(올바르게 계산하면 49자). 그렇지 않으면 12와 32만 사용됩니다.
$ sed 's/\(.\{12\}\)\(.\{32\}\)/\1;\2;/' input
2015021DUMMY;001EAN1377689456777678945GERDE00;02345
2015031DUMMY;002EAN1345647876867867867TURTR01;54565
...당신이 원하는 것일 수도 있고 아닐 수도 있습니다.
일반적으로 그룹의 길이는 x, yx 및 zyx 문자입니다.
또는 세 가지 별도의 대체품을 사용할 수 있습니다.
sed 's/.\{12\}/&;/; s/.\{45\}/&;/; s/.\{62\}/&;/'
이 경우 길이는 x, y+1(x에 삽입된 세미콜론) 및 z+2가 됩니다.
답변2
sed 's/./&;/59; s//&;/43; s//&;/11' <in >out
;
당신이 원하는지 잘 모르겠어요예한 줄의 12번째, 44번째 또는 60번째 문자 또는따르다그것. 후자인 경우 모든 숫자에 1을 추가하고 줄 끝에 세미콜론을 추가할 위험이 있습니다.(그게 중요하다면)또는 아래를 참조하세요. 단, 위에 적힌 대로 sed
이미 59번째 문자가 없으면 60번째 문자는 추가되지 않습니다.
추가 대신 삽입을 수행합니다.
sed 's/./;&/60; s//;&/44; s//;&/12' <in >out
...다른 방법입니다. 이 경우 sed
세미콜론은 줄 끝에 추가되지 않습니다. 세미콜론은 60번째 문자 위치에만 삽입됩니다.(예를 들어)그렇게 하면 반드시 61명이 될 것입니다.
이 세 가지 대체는 상호의존적이지 않습니다. 어떤 방식으로 작성하든 sed
줄 길이에 따라 세미콜론 1개, 2개 또는 3개가 추가됩니다. 59자 또는 60자를 포함하는 줄은 3개를 갖게 되며, 42자 또는 43자보다 긴 짧은 줄은 세미콜론 2개를 갖게 되며, 11자 또는 12자 이상과 일치하는 다른 줄은 한 번만 편집됩니다. 11자보다 짧은 줄은 영향을 받지 않습니다.
세 개의 세미콜론을 모두 정당화할 수 있을 만큼 긴 줄에만 영향을 미치려면 다음을 수행하십시오.
sed -e's/./;&/60;ts' -eb -e:s \
-e's//;&/44;s//;&/12' <in >out
...그럴 겁니다.
...GNU와 함께sed
(그리고 minised
)T
대신 est를 사용할 수 있습니다 .실패하다단지 성공만을 위한 것이 아닙니다.
sed -e's/./&;/59;T; s//&;/43; s/&;/12' <in >out