每个文件的第一行包含字段名称。字段名称中可能存在重复。我只想打印唯一的字段名称。以下是我尝试的:
在 Bash 文件 files_and_folders.sh 中,我输入了以下内容:
#!/bin/bash
for file in **/*.TXT ; do
awk 'NR == 1 { for (i=1; i<=NF; i++) if (!seen[$i]) seen[$i] = 1} END { for (idx in seen) printf ("%s\n",idx) }' "${file}"
done
Bash 文件成功运行,但输出包含重复项:
AB_CODE
ACFT_CODE
AC_TYPE
ADD_INFO
AKA
ALT
ALT
ALT
ALT
ALT
ALT
ALT
ALT1_DESC
ALT2_DESC
ALT3_DESC
如何修改 AWK 程序(在 Bash 脚本中)以消除重复?
最有效的做法可能是:
但是如果您想使用 awk,那么使用任何 awk 您都可以执行以下操作:
或这样:
但是在部分中创建一个
seen[]
数组并循环遍历它END
是没有意义的,也没有意义if (!seen[$i]) seen[$i] = 1
——那就是测试是否seen[$i]
设置了,如果没有,则设置它,以便该语句的结果始终seen[$i]
设置为1
。您不能运行循环
bash
并为每个文件运行一个新awk
进程,否则关联数组seen
将为每个文件初始化awk
,并且它将不知道以前调用设置的现有条目awk
。你应该像这样一次性完成它
awk
: