假设我有 2 个或更多文件由 处理。 awk 脚本。
$ cat file1
a
b
c
$ cat file2
d
e
如何获取正在处理的文件编号?是内置的 awk 为了那个原因?
我想要一个具有以下行为的脚本。我可以用什么作为我的
SOMEVARIABLE
?$ awk '{print FILENAME, NR, FNR, SOMEVARIABLE, $0}' file1 file2
file1 1 1 1 a
file1 2 2 1 b
file1 3 3 1 c
file2 4 1 2 d
file2 5 2 2 e
最佳答案
编辑:由于 OP 需要特定格式的输出,并且不想只需要文件计数,所以现在添加以下解决方案,这也应该考虑空文件计数。(用 GNU awk
测试和编写)
awk '
FNR==1{
FNUM++
}
{
print FILENAME, NR, FNR, FNUM, $0
}
ENDFILE{
if(FNUM==prev){
FNUM++
print FILENAME, 0, 0, FNUM, "Empty file"
}
prev=FNUM
}' file1 file2
1 Input_file1 和空 Input_file2 的输出如下。
file1 1 1 1 a
file1 2 2 1 b
file1 3 3 1 c
file2 0 0 2 Empty file
想知道
awk
处理的文件总数的解决方案命令:第一个解决方案:您能否尝试以下操作,使用 GNU
awk
(考虑到您不想在这里计算空文件)。awk 'NF{count++;nextfile} END{print count}' Input_file1 Input_file2
第二种解决方案:如果您只想知道传递给
awk
的文件数命令然后尝试跟随。awk 'END {print ARGC-1}' Input_file1 Input_file2
以上代码举例说明:假设以下是 Input_files,其中 Input_file1 有内容,Input_file2 是空文件,如下所示:
cat Input_file1
a
b
c
> Input_file2
现在当我们运行命令
ARGC
我们得到 2 个文件的输出。awk 'END {print ARGC-1}' Input_file1 Input_file2
2
现在,当我运行我的第一个命令时,它给出了 1 个文件,因为它不计算空文件。
awk 'NF{count++;nextfile} END{print count}' Input_file1 Input_file2
1
关于awk - 如何获取 awk 脚本正在处理的文件号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58015719/