다음 내용이 포함된 파일(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
$5
1
편집하다:
-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 파일에 저장됩니다.