在查看另一个问题时,我遇到了一个我通常无法为 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 中有什么方法吗?
文件名和分配等参数可以混合使用,因此您可以运行:
将按
awk
顺序处理它们,以便您可以RS
为每个文件设置不同的值。请注意,这
awk
可能会阻塞包含该=
字符的文件名。这是解决此问题的方法。.