awk 通常使用 $1, $2 来指定列。假设有一个标题行,其中包含列的字段名称,有没有办法通过使用字段名称而不是列计数来指定列?
例如,对于这个文件
ID, Name, Salary
1, John, 100000
我可以使用 $ID、$Name、$Salary 之类的东西,而不是使用 $1、$2、$3...
当然,我知道没有直接使用 $ID 的方法。我只是好奇是否有类似且简单的方法。一些 csv 文件有 100 多列,使用字段名称会更容易。
这个脚本取自由Janis Papanagnou编写的awk.info可能会有所帮助。
awk -F, -v cols="${1:?}" '
BEGIN {
n=split(cols,col)
for (i=1; i<=n; i++) s[col[i]]=i
}
NR==1 {
for (f=1; f<=NF; f++)
if ($f in s) c[s[$f]]=f
next
}
{ sep=""
for (f=1; f<=n; f++) {
printf("%c%s",sep,$c[f])
sep=FS
}
print ""
}
'