awk 명령이 있습니다. 변수를 사용해야 i
하는데 이렇게 하면 명령이 작동하지 않습니다.
"fechaName": "1", "firstName": "gdrgo", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx "":"존","성":"222",dfg "fechaName": "2", "xxxxx": "John", "Name": "Beto", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", " 마지막 이름" ": "111", "xxxxx": "존", "fechaName": "4", "xxxxx": "John", "Name": "Beto", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", " 마지막 이름" ": "111", "xxxxx": "존", "fechaName": "4", "xxxxx": "John", "xxxxx": "John", "FirstName": "beto2", "xxxxx": "John", "Lastname": "555", "xxxxx " ": "존", "xxxxx": "존", "fechaName": "5", "xxxxx": "John", "xxxxx": "John", "FirstName": "beto2", "xxxxx": "John", "Lastname": "444", "xxxxx " ": "존", "xxxxx": "존", "fechaName": "4", "firstName": "gdrgo", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx": "John", "xxxxx" "":"존","성":"222",dfg "fechaName": "7", "xxxxx": "John", "xxxxx": "John", "이름": "beto2", "xxxxx": "John", "성": "444", "xxxxx " ": "존", "xxxxx": "존",
대신 5를 사용하면"나"효과가있다
awk -v OFS='"' -v FS='Name": "' '{ for( i=2; i<=7; i++ ) if( match($2, /5"/) ) print $0 }' sumacomando
이건 내 명령이야
awk -v OFS='"' -v FS='Name": "' '{ for( i=2; i<=7; i++ ) if( match($2, /**i**"/) ) print $0 }' sumacomando
awk -v OFS='"' -v FS='Name": "' '{ for( i=2; i<=7; i++ ) if( match($2, /i"/) ) print $0 }' sumacomando
답변1
한 번에 모든 레코드를 정렬할 수는 없습니다.
문자 그대로 주요 질문에 대답하고 필드를 변수와 일치시키려면 이를 수행하지 않아도 됩니다 match($2,i)
( /.../
또는 뒤에 match($2, i "\"")
. 가 오고 일반 문자열 연결 구문을 사용함).i
"
이렇게 해도 "4"가 포함된 레코드에 대해 올바른 결과가 제공됩니다.
awk '{i=4}$0 ~ "\"" i "\""' file1 #(string concatenation yelds to "4")
하지만 이 방법은 잘 작동하지만 예상한 대로 데이터를 한 번에 자동으로 정렬하지 않습니다.
awk '{for (i=1;i<8;i++) if ($0 ~ "\"" i "\"") print}' file1
모든 기록을 정렬하려면 먼저 모든 기록을 메모리에 로드한 다음 정렬된 순서로 인쇄해야 합니다.
예제 파일에 적용되는 다른 접근 방식은 다음과 같습니다.
awk -F"[\"]" '{a[$4]?a[$4]=a[$4] ORS $0:a[$4]=$0;last=NR}END{for (i=1;i<=last;i++) if (a[i]) print a[i]}' file1
"
첫 번째 줄의 구분 기호 텍스트를 사용하면 "fechaName": "1",....
4개 부분으로 나누어지며 1
(필드 $4)는 정수로 직접 사용할 수 있습니다.
이 부분은 a[$4]?a[$4]=a[$4] ORS $0:a[$4]=$0
if-then-else에 불과합니다.
a[$4]
(==> 첫 번째 줄에 대해) 이미 값이 있으면 a[1]
출력 레코드 구분 기호(ORS)를 사용하여 a[$4]의 이전 내용에 이 줄을 추가합니다. 이는 새 줄(또는 짧은 "\ n") - 그렇지 않으면 $0을 a[$4]에 적용합니다.
마지막으로 마지막 부분에서는 이 배열 a를 인쇄합니다.
여기서는 이 작업의 경우 정렬이 awk보다 훨씬 빠르다고 말해야 합니다.
LC_ALL=C sort -t"\"" -k3 file1
답변2
1부터 7까지의 행을 인쇄하려는 것 같습니다. 그건 이렇겠지
awk '/"fechaName": "[1-7]"/ { print }'