조건에 따라 필터링하는 awk 명령을 작성했습니다.
awk '{if(( (substr($0,9,3) == "TGO") && ((substr($0,1,4) == "9123" || (substr($0,1,4) == "9704"))) print (substr($0,279,2),substr($0,1,4),substr($0,5,8));}' Downloadfinance.txt
구문 오류입니다. 여러 가지 방법을 시도했지만 여전히 동일한 예외가 발생합니다.
이건 오류야
awk: cmd. line:1: {if(( (substr($0,9,3) == "TGO") && ((substr($0,1,4) == "9123" || (substr($0,1,4) == "9704"))) print (substr($0,9,3),substr($0,1,4),substr($0,5,8));}
awk: cmd. line:1: ^ syntax error
awk: cmd. line:1: {if(( (substr($0,9,3) == "TGO") && ((substr($0,1,4) == "9123" || (substr($0,1,4) == "9704"))) print (substr($0,9,3),substr($0,1,4),substr($0,5,8));}
awk: cmd. line:1: ^ syntax error
답변1
두 개가 누락되었거나 )
하나가 누락되고 )
또 하나가 누락되었습니다.(
수정된 코드(추가 대괄호가 제거되었습니다. 여기서 줄 바꿈은 설명을 위한 것일 뿐이며 실제로 실행되지는 않습니다):
{
if (
substr($0,9,3) == "TGO" &&
(
substr($0,1,4) == "9123" || substr($0,1,4) == "9704"
)
)
print substr($0,279,2), substr($0,1,4), substr($0,5,8)
}
또는 (이 구문은 개행 문자의 위치에 적합합니다)
{
if (substr($0,9,3) == "TGO" && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704" ))
print substr($0,279,2), substr($0,1,4), substr($0,5,8)
}
또는 (패턴 작업 메커니즘 사용)
substr($0,9,3) == "TGO" && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704") {
print substr($0,279,2), substr($0,1,4), substr($0,5,8)
}
코드의 형식은 위의 첫 번째 변형과 동일하지만 모든 괄호는 그대로 유지됩니다.
{
# too many ( below
if ((
(substr($0,9,3) == "TGO") &&
(
# missing ) below, alt. too many ( and )
(substr($0,1,4) == "9123" || (substr($0,1,4) == "9704")
)
)
print (substr($0,279,2),substr($0,1,4),substr($0,5,8))
}
답변2
테스트할 파일을 제공하지 않았기 때문에 확실하지 않지만 다음과 같이 작성하려는 것으로 추측됩니다.
awk '{ if( substr($0,9,3) == "TGO" && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704")){ print substr($0,279,2),substr($0,1,4),substr($0,5,8)}}' Downloadfinance.txt
또는 더 명확하게 말하자면:
awk '{
if( substr($0,9,3) == "TGO" &&
(substr($0,1,4) == "9123" || substr($0,1,4) == "9704")){
print substr($0,279,2),substr($0,1,4),substr($0,5,8)
}
}' Downloadfinance.txt
답변3
또는 if
조건을 규칙 전제 조건으로 이동할 수 있습니다.
awk 'substr($0,9,3) == "TGO" && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704"){
print substr($0,279,2),substr($0,1,4),substr($0,5,8)
}'
이를 다음과 같이 단순화할 수도 있습니다.
awk 'substr($0,9,3) == "TGO" && (/^9123/ || /^9704/) { print .... }'
답변4
당신이 사용하는 경우암소 비슷한 일종의 영양앗 (또는 할 수 있다)특징이 있어요이 문제를 직접 처리하려면:
awk -vFIELDWIDTHS="4 4 3 267 2" '$3=="TGO" && ($1=="9123"||$1=="9704"){ print $5,$1,$2 }'