인라인 파일의 필드 바꾸기

인라인 파일의 필드 바꾸기

다음 내용이 포함된 파일(a.txt)이 있습니다.

Redhat master 12345678 V1A 20.0/20.0.1
Windows slave 12345678 V1B 19.0/19.0.1

"master"라는 단어가 포함된 행을 파악하고 네 번째 및 다섯 번째 필드를 새 값으로 바꾸고 싶습니다.

예를 들어, 새로운 a.txt는 다음과 같을 수 있습니다.

Redhat master 12345678 V1B 20.0/20.0.2
Windows slave 12345678 V1B 19.0/19.0.1

여기서 "V1A"는 "V1B"로 대체되고 "20.0/20.0.1"은 "20.0/20.0.2"로 대체됩니다.

누구든지 이것을 달성하도록 도울 수 있습니까?

또한 새 값을 스크립트 매개변수로 전달하고 싶습니다.

새 값을 스크립트에 매개변수로 전달할 수 있나요? 다음 스크립트를 시도 중입니다.

스크립트(test.sh)의 내용은 다음과 같습니다.

#!/bin/bash

if [ "$2" == "" ]; then
    echo usage: $0 \<version\> \<revision\>
    exit -1
else
   version=$1
   revision=$2
fi
awk '/master/{$4="$1";$5="$2"}' a.txt >newa.txt

내가 실행할 때 :

#bash test.sh V1B 20.0/20.0.2

작동하지 않습니다.

답변1

그리고 awk:

awk '/master/{$4="V1B";$5="20.0/20.0.2"};1' a.txt

먼저 "master"라는 단어가 포함된 행을 검색한 후 4번째( ) 및 5번째( ) 필드 /master/의 값을 바꿉니다. 결국 모든 것을 인쇄하게 됩니다.$4$51

편집하다:

-v새 값을 매개변수로 전달하려면 switch in 을 사용해야 합니다 awk. 예를 들면 다음과 같습니다.

x="V1B"
y="20.0/20.0.2"
awk -v VAR1="$x" -v VAR2="$y" '/master/{$4=VAR1;$5=VAR2};1' a.txt

(그러나 이러한 변수에 백슬래시가 포함되어 있으면 올바르게 작동하지 않습니다.)

답변2

줄을 서서

 awk '/master/{$4="$1";$5="$2"}' a.txt >newa.txt

"$1"은 쉘에서 전달된 값을 저장하지 않습니다.

너는 써야 해

awk '/master/{$4="'$1'";$5="'$2'"}' a.txt > newa.txt

이러한 방식으로 $1 frm 호출 쉘이 awk 파일에 저장됩니다.

관련 정보