awk - 如何获取 awk 脚本正在处理的文件号?

标签 awk

假设我有 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/

相关文章:

linux - 如何从日志文件中打印多行,并将它们转换为单行

bash - 使用 sed 或 awk 增量更改字符串

regex - Linux grep/awk : Filter lines in a file, 但在 EOF 处克隆(保留或省略)尾随换行符

awk - 如何用awk处理3个文件?

ubuntu - 如何匹配文件中的某些单词并列出该匹配单词的所有行? (没有正则表达式)

linux - AWK 在 Bash 中返回/打印为关联数组

awk - 带有 IP 和 OUI 供应商的 Nmap 输出

python - AWK 不适用于由 ^A 分隔的第一行

linux - Bash + 从行中删除空格

awk - 使用 grep 或 awk 查找 txt 和 csv 文件之间的匹配行