我有n个文件,在这些文件中,每个文件中的不同列号都会给出一个名为“thrudate”的特定列。
我只想一次性从所有文件中提取此列的值。所以我尝试使用awk。这里我只考虑一个文件,并提取thrudate的值
awk -F, -v header=1,head="" '{for(j=1;j<=2;j++){if($header==1){for(i=1;i<=$NF;i++){if($i=="thrudate"){$head=$i;$header=0;break}}} elif($header==0){print $0}}}' file | head -10
我是如何接近的:
答案 0 :(得分:3)
您可以使用以下awk脚本:
print_col.awk :
# Find the column number in the first line of a file
FNR==1{
for(n=1;n<=NF;n++) {
if($n == header) {
next
}
}
}
# Print that column on all other lines
{
print $n
}
然后使用find
在每个文件上执行此脚本:
find ... -exec awk -v header="foo" -f print_col.awk {} +
在评论中,您要求的版本可以根据其标题名称打印多个列。您可以使用以下脚本:
print_cols.awk :
BEGIN {
# Parse headers into an assoc array h
split(header, a, ",")
for(i in a) {
h[a[i]]=1
}
}
# Find the column numbers in the first line of a file
FNR==1{
split("", cols) # This will re-init cols
for(i=1;i<=NF;i++) {
if($i in h) {
cols[i]=1
}
}
next
}
# Print those columns on all other lines
{
res = ""
for(i=1;i<=NF;i++) {
if(i in cols) {
s = res ? OFS : ""
res = res "" s "" $i
}
}
if (res) {
print res
}
}
这样称呼:
find ... -exec awk -v header="foo,bar,test" -f print_cols.awk {} +