저는 로봇 프레임워크 테스트 케이스를 작업 중입니다. 내 요구 사항은 아래 파일을 읽고 위치에 따라 값을 비교하는 것입니다. 예를 들어:
- 3으로 시작하는 줄. 3은 ID번호인데 행 전체를 선택해서 위치에 따른 값을 비교해야 합니다. BRONYX는 위치 9에서 시작하며 위치 44의 NEW YORK 출력과 비교되어야 합니다. 이 예에서는 BRONYX를 NEWYORK으로 변경해야 합니다. 위치를 기준으로 문자열을 추출하는 방법.
3^G^G^G^GBRONX^GNY^G10457^GUSA^G^G^GBRONX는 NEW YORK으로 변경되어야 합니다. - 파생 도시 예시^G^G^G^GNEW YORK^GNY^G10457^G10457^G^GBRONX 카운티 ^G^GBRONX^G뉴욕^GUSA^G^G^G^G^G^G^G^G40.845600^G-73.898500^G325^GSPU^GZ1^G^G^G^G^G^G ^ G^뉴욕-뉴어크-저지시, NY-NJ-PA 수도권 통계 지역^G35620^GE020^GZC5X^GMMMMVVV^G36005039500
예 2: ID 2가 있는 행을 선택합니다. 이 예에서는 위치 9의 MANHATTAN이 New York(위치 40)으로 변경되어야 합니다. 2^G^G^G^GMANHATTAN^GNY^G^GUSA^G^G^GMANHATTAN은 NEW YORK으로 변경되어야 합니다. - 파생 도시 예시^G^G^G^GNEW YORK^GNY^G^G^G^GNEW 요크 ^G^G^G^구사^G^G^G^G^G^G^G^G40.783434^G-73.966249^G425^GSPU^GG3^G^G^G^G^G^G^ 지 ^G^G^G^G^GMMMMVVM^G
도울 수 있니?
답변1
각각이 ^G
Control-G 문자라고 가정합니다. 즉, 파일은 \a
ASCII 벨 문자( )를 사용하여 구분되며 각 줄의 5번째 필드를 15번째 필드의 값으로 설정하려고 합니다.
awk -F '\a' 'BEGIN { OFS=FS } { $5 = $15 }; 1' file >newfile
이는 필드 구분 기호를 ASCII 벨 문자로 설정하는 데 사용됩니다 -F '\a'
. 그런 다음 출력 필드 구분 기호를 동일한 문자로 설정하고 5번째 필드를 15번째 필드의 값으로 업데이트합니다. 코드를 후행하면 1
수정된 레코드가 출력됩니다. 결과는 newfile
이 예에서 호출된 파일에 기록됩니다.
첫 번째 필드 2
또는 첫 번째 필드로 3
시작하는 행 에만 영향을 주고 다음을 사용합니까?
awk -F '\a' 'BEGIN { OFS=FS } $1 == 2 || $1 == 3 { $5 = $15 }; 1' file >newfile
결과는 데모 목적으로만 마크다운 테이블 형식으로 지정됩니다. 4열은 e
열이고 15열은 o
열입니다.
ㅏ | 두번째 | 씨 | 디 | 이자형 | 에프 | G | 시간 | 나 | 제이 | 케이 | 나 | 쌀 | N | 오 | 피 | 큐 | 아르 자형 | 에스 | 티 | 너 | V | 승 | 엑스 | 와이 | 지 | 아 | BB | CC | DD | 이 | FF | gg | 헤헤 | 둘 | 지에지에 | ㅋㅋ | 둘 | mm | 친절 | 오 | PP | ₩₩ | 봄 여름 시즌 | TT | 잘 | 웨이웨이 | W W | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
삼 | 뉴욕 | 뉴욕 | 10,457 | 미국 | 브롱크스는 뉴욕으로 변경되어야 합니다 - 파생 도시 예시 | 뉴욕 | 뉴욕 | 10,457 | 10,457 | 브롱크스 카운티 | 브롱크스 | 뉴욕 | 미국 | 40.846… | -73.898… | 325 | SPU | Z1 | 뉴욕-뉴어크-저지시, 뉴욕-뉴저지-펜실베니아 수도권 통계 지역 | 35,620 | E020 | ZC5X | MMMMMVVV | 36,005,039,500 | ||||||||||||||||||||||||
2 | 뉴욕 | 뉴욕 | 미국 | 맨해튼은 뉴욕으로 변경되어야 합니다 - 파생 도시 예시 | 뉴욕 | 뉴욕 | 뉴욕 | 미국 | 40.783… | -73.966… | 425화 | SPU | G3 | MMMMMVVM |
답변2
SE에 오신 것을 환영합니다. 몇 가지 생각:
- 파일을 파이프
hexdump
하거나xxd
사람이 읽을 수 있는 표현을 봅니다. strings
파일에서 읽을 수 있는 텍스트를 추출 하는 데 사용됩니다 . 내 생각엔 이것이 당신에게 도움이 될 것 같아요.cut
및/또는head
더하기 기호를 사용하여tail
부분 행을 추출하거나 각각 행을 선택합니다.sed
또는awk
그들은 당신의 친구가 될 수 있지만, 당신이 그것을 사용하는 방법을 배우는 경우에만 가능합니다. 몇 년이 걸립니다.
위치를 기준으로 문자열을 추출하는 방법
이 질문에 근거해서 말하기는 어렵습니다.
출력과 비교해야합니다
솔루션을 작성해 달라고 요청하시나요? 무엇을 시도해 보셨나요? 제안된 대로 읽으 셨나요 man awk
? 아니면 Linux는 힌디어로 된 문서를 제공하지 않습니까?
예
만약에문자열은 길이가 고정되어 있으며만약에파일에는 개행 문자가 없으므로 단일 cut
호출을 사용할 수 있습니다.
$ echo my long string | cut -c4-8
산출:
long
알아채다. 데이터를 더 잘 표시하려면 편집기나 마크다운 형식을 사용하세요.
답변3
먼저 모든 Ctrl+G 문자를 찾아 |
(파이프) 로 바꿨습니다.
sed 's/^G/|/g' test.csv > output.csv
다음을 사용하여 전체 줄을 인쇄할 수 있습니다.
grep ^6 output.csv
6
주민등록번호 입니다 .
6|LAKELINE MALL|||AUSTIN|TX||USA|||MALL EXAMPLE - POI|11066 PECAN PARK BLVD|||AUSTIN|TX|78613|78613||TRAVIS||AUSTIN|CEDAR PARK|USA||||||||30.468408|-97.803570|140|SPU|NA||||||||||||UUUUUVVM|