awk通常使用$ 1,$ 2来指定列。假设有一个带有字段名称的标题行,是否有办法使用字段名称而不是列数来指定列?
例如,对于这个文件ID, Name, Salary
1, John, 100000
而不是使用$ 1,$ 2,$ 3,我可以以某种方式使用$ ID,$ Name,$ Salary ......
当然,我知道没有使用$ ID的直接方式。我很好奇是否有类似且简单的方法。一些csv文件有100多列,使用字段名称可以更容易。
答案 0 :(得分:1)
此剧本取自 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 ""
}
'