기본적으로는 게임 서버(마인크래프트)인데, 새로운 세계 생성을 자동화하려는 상황에 봉착하고 있습니다. 기본적으로 이 코드 조각이 포함된 파일이 성공적으로 생성되었습니다.
파일 1.txt
keepSpawnInMemory: 'true'
spawnLocation:
==: MVSpawnLocation
yaw: 0.0
pitch: 0.0
z: 256.5
y: 62.0
x: -223.5
autoLoad: 'true'
bedRespawn: 'true'
이것은 잘 작동하지만 z: 256.5, y: 62.0 및 x: -223.5를 별도로 추출한 다음 다음 줄을 사용하여 file2.txt라는 파일을 작성해야 합니다.
world: mine
x: -223.5
y: 62.0
z: 256.5
yaw: 0.0
pitch: 0.0
name: mine
awk와 같은 것을 사용하여 초기 숫자를 추출하고 변수에 할당한 다음 파일에 쓸 것이라고 가정합니다. 저는 awk를 한번도 사용해본 적이 없어서 매우 혼란스럽습니다. 도움을 주신 분들께 감사드립니다. 나는 Ubuntu Linux, bash 스크립트를 사용합니다. awk와 bash를 사용하여 이와 같은 텍스트를 추출하고 변수로 변환할 수 있나요?
편집하다:
파일 1에 x, y, z의 여러 인스턴스가 있다는 사실을 언급하는 것을 잊었습니다. 여기에서 액세스할 수 있습니다:http://pastebin.com/TqaLcWzV
특정 줄부터 시작하는 방법이 있나요? 예를 들어, z, y, x는 항상 각각 183, 184, 185행에 있습니다.
답변1
다음 스크립트를 사용해 보세요.
#!/bin/bash
FILE1=/path/to/file1
FILE2=/path/to/file2
#extracting lines 183 to 185
FILE1=$(awk 'FNR>=183&&FNR<=185' $FILE1)
#extracting variables
Z=$(echo "$FILE1" | grep z: | awk '{print $2}')
Y=$(echo "$FILE1" | grep y: | awk '{print $2}')
X=$(echo "$FILE1" | grep x: | awk '{print $2}')
#YAW=$(echo "$FILE1" | grep yaw: | awk '{print $2}')
#PITCH=$(echo "$FILE1" | grep pitch: | awk '{print $2}')
cat <<EOF > $FILE2
world: mine
x: $X
y: $Y
z: $Z
yaw: 0.0
pitch: 0.0
name: mine
EOF
요(yaw)와 피치(pitch)도 추출하려면 다음을 수행하십시오.
181번째 줄에서 추출하도록 awk 줄을 변경합니다.
FILE1=$(awk 'FNR>=181&&FNR<=185' $FILE1)
주석 해제
YAW
및PITCH
줄맨 아래의 Yaw: 및 Pitch:를 다음으로 변경합니다.
yaw: $YAW pitch: $PITCH
답변2
정말 필요해?분배하다변수의 값은? 이러한 variable: value
쌍은 입력과 출력에서 동일하게 나타나므로 텍스트로만 추출할 수 있습니다.
$ awk '/mine:/,/allowFlight/ {if ($1 ~ /^[xyz]:/) print;}' file1.txt
z: 256.5
y: 62.0
x: -223.5
명령 대체를 사용하여 여기 문서에 직접 넣을 수 있다고 생각합니다.
cat > file2.txt << EOF
world: mine
$(awk '/mine:/,/allowFlight/ {if ($1 ~ /^[xyz]:/) print " "$1,$2;}' file1.txt)
yaw: 0.0
pitch: 0.0
name: mine
EOF
print " "$1,$2
(저는 출력을 약간 더 예쁘게 만들기 위해 대신 simple을 사용했습니다 print
).