다른 질문을 보는 동안 awk 프로그램에 두 개의 파일이 필요한 경우(즉, 비교를 위해 첫 번째 파일의 항목을 배열로 읽어들이는 경우(보통 이러한 경우)) awk에서는 일반적으로 해결할 수 없는 문제를 발견했습니다. 파일 간의 RS 변경을 처리하는 방법은 무엇입니까?
다음 파일이 제공됩니다.
~$> cat awktest1.txt
111 112 113 114|121 122 123 124|131 132 133 134|141 142 143 144
~$> cat awktest2.txt
211 212 213 214
221 222 223 224
231 232 233 234
241 242 243 244
기본 예로 다음 명령을 실행하려면 다음을 수행하십시오.
#! /usr/bin/awk -f
# awktest.awk file1 file2
# cant swap RS between files
BEGIN { RS="|" }
NR>ONR && ONR==1 { RS="" }
{ print $1 "." $2 "." $3 "." $4 }
# will work with with, but this is GNU only.
# ENDFILE { RS="" }
END { print "\nfinal $0: \n" $0 }
그런 다음 RS
두 번째 파일의 첫 번째 레코드를 읽은 후 변경이 발생하므로 이(인위적인 예)에서 출력은 다음과 같습니다.
~$>./awktest.awk awktest1.txt awktest2.txt
111.112.113.114
121.122.123.124
131.132.133.134
141.142.143.144
211.212.213.214
final $0:
211 212 213 214
221 222 223 224
231 232 233 234
241 242 243 244
두 번째 파일의 모든 내용은 4가 아닌 단일 레코드로 읽혀집니다. 분명히 이 예에서 awk 이전의 문제를 해결하는 것은 간단했지만 실제로 awk에 어떤 방법이 있습니까?
답변1
파일 이름 및 할당과 같은 매개변수를 혼합할 수 있으므로 다음을 실행할 수 있습니다.
awk '{ print $1 "." $2 "." $3 "." $4 }' RS='|' file1 RS='' file2
각 파일마다 다른 값을 설정할 수 있도록 awk
순차적으로 처리합니다 .RS
awk
이 문자가 포함된 파일 이름 은 =
.
문제를 해결하는 방법은 다음과 같습니다..