이것은 내 첫 번째 질문이므로, 무엇이든 놓치면 알려주십시오.awk 배열은 인쇄 할 때 과도하게 표시됩니다.
이것은 배열을 사용하여 키 - 값 쌍을 만드는 awk 스크립트입니다.
헤더 정보가 콜론으로 구분 된 파일이 있습니다. 데이터는 그 아래에 있으며 콜론으로 구분됩니다. 필자의 목표는 새로운 파일을 인쇄하는 키 - 값 쌍을 만드는 것입니다. 나는 배열에 배치되도록 모든 것을 가지고 있고 거의을 완벽하게 출력합니다. 출력 여기서
#!/bin/awk -f
BEGIN {
FS = ":"
}
{
x = 1
if (NR==1) {
num_fields = NF ###This is done incase there are uneven head fields to data fields###
while (x <= num_fields) {
head[x] = $x
x++
}
}
y = 2
while (y <= NR) {
if (NR==y) {
x = 1
while (x <= num_fields) {
data[x] = $x
x++
}
x = 1
while (x <= num_fields) {
print head[x]"="data[x]
x++
}
}
y++
}
}
END {
print "This is the end of the arrays and the beginning of the test"
print head[16]
print "I am head[16]-"head[16]"- and now I'm going to overwrite everything"
print "I am data[16]-"data[16]"- and I will not overwrite everything, also there isn't any data in data[16]"
}
된다 :
...
iscsi_name=iqn.1111-00.com.abc
iscsi_alias=2222.blah01.blah01node00
panel_name=
enclosure_id=11BLAH00
canister_id=
=nclosure_serial_number ### Here is my issue ###
This is the end of the arrays and the beginning of the test
enclosure_serial_number
- and now I'm going to overwrite everything
I am data[16]-- and I will not overwrite everything, also there isn't any data in data[16]
여기
...:iscsi_name:iscsi_alias:panel_name:enclosure_id:canister_id:enclosure_serial_number
...:iqn.1111-00.com.abc:2222.blah01.blah01node00::11BLAH00:::
코드이다 : 여기
는 입력 참고 : 데이터 [16]이 줄 끝 부분에 없기 때문에 데이터 라인에 여분의 콜론이 있으므로 위의 num_fields 노트
왜 헤드 [16]가 자신을 덮어 쓰 시나요? 필드 끝에 줄 바꿈 (\ n)이 있습니까? 그렇다면 어떻게 제거 할 수 있습니까? 나는 마지막 문자를 뺀 것을 더해 보려고 노력했다. 배열이 그 필드에서 사용할 수있는 문자의 수를 제한하려고 시도했지만 행운이 없습니다. 나는 더 많은 아이디어와 운을 시험했다. 전체 공개 : 나는이 모든 것에 비교적 새로운 것이므로 이전 수정본을 엉망으로 만들었을 것입니다!
왜 이런 일이 발생했는지에 대한 아이디어가 있습니까? 감사합니다. -cheezter88
TL; DR하지만, 제목하지만 윈도우 타입 줄 끝은 ('\ r \ n'과 단지'\ n', awk에서'dos2unix' 또는'sub (/ \ r /, "", $ NF)'를 사용하는 원인이 될 수 있습니다. –
BTW, 귀하의 스크립트는 마지막 두 번의 인쇄 호출에서 작은 따옴표를 사용합니다. – thanasisp
아래에 의견을 게시 한 후 이것을 보았습니다. 감사합니다! 모든 것을 Linux로 이전. 나는 문자 그대로 책상을 상대로 머리를 치고 있었고 그것은 단지 어리석은 창이다. –