. 수수께끼 같은 상태에 쉼표가 있습니다. 아마 &&
이어야한다고 생각합니다. 그림과 같이 작업이없는 조건 (기본 동작 인 print $0
)과 조건없는 동작 (모든 행에 기본 일치가 있음)이 있습니다.
awk -F"|" 'BEGIN{OFS="|"}
NR != 1 && $3 = "A" && $36 != 0 && length($36) > 0 {
print $1, $81, $3, $2, $21, $22, $6, $19, $20, $25, $26, $29, $30,
$31, $33, $34, $36, $38, "", $39, "", "", $40, $42, "rrr", "", ""
}'
참고로 {
은 조건과 같은 줄에 있습니다. 개인적으로, 나는 아마 그것을 써서 :
awk -F"|" 'BEGIN{OFS="|"}
{
if (NR != 1 && $3 = "A" && $36 != 0 && length($36) > 0)
{
print $1, $81, $3, $2, $21, $22, $6, $19, $20, $25, $26, $29, $30,
$31, $33, $34, $36, $38, "", $39, "", "", $40, $42, "rrr", "", ""
}
}'
는 지금까지, 당신이 $3
이 A
경우는, 데이터의 첫 번째 행이 아닌 경우 인쇄 할 있으리라 믿고있어, 및 $36
이 경우 어느 쪽도 없습니다 빈 또는 0. '필터링하고 싶습니다'라고 말하면서 필터링 된 행을 포함 시키거나 제외할지 여부는 설명하지 않습니다. 당신은 필드 (36)가 비어있는 행에만 관심이 있다면, 당신은에 조건을 단순화 할 수 있습니다 :
awk -F"|" 'BEGIN{OFS="|"}
{
if (NR != 1 && $3 = "A" && $36 != "")
{
print $1, $81, $3, $2, $21, $22, $6, $19, $20, $25, $26, $29, $30,
$31, $33, $34, $36, $38, "", $39, "", "", $40, $42, "rrr", "", ""
}
}'
아니면 그냥 length($36) > 0
를 대신 사용할 수 있습니다; 이 문맥에서는 동등합니다.
샘플 데이터를 제공하지 않았으므로 81 개 이상의 파이프 구분 필드가있는 레코드가 어떻게 생겼는지 확인할 수 없으므로이 코드를 테스트 할 수 없습니다. 질문 할 때 코드를 단순화해야합니다. 당신은 예를 들어 4 개의 컬럼으로 할 수 있고, 80+ 컬럼을 가진 실제 사례로 소규모 솔루션을 다시 적용 할 수 있습니다.
(공백 값 || (두 개의 파이프가 중간에 없음))을 제거해보십시오. 사이에 어떤 가치가 있음을 알 수 없습니까? – user1415006
@ user1415006 : 길이 ($ 36)? –