我有多个CSV文件(68个文件) 行就像提取塔和检查列长度BASH
2#21231#132#1231132#26#123#0#1#81#44123#A#1236#123#
我要检查,如果长度列11的每一行,每个文件是等于208,我想看看有多少行等于208列11的长度(COUNT =计数+ 1)
我试图脚本波纹管,但我得到计数总是0
#!/bin/bash
date
ext='.UTF'
c=0
LIMIT=208
FILES=//DOC/*
for f in $FILES
do filename=$(echo $f| cut -d'/' -f 10)
awk 'BEGIN{FS=OFS="#"}
{ for(i=11;i<12;i++){
if (length($i) -eq LIMIT);
then let "c += 1";
print ''length($i);
fi
}
} $i 1' $f
done
echo 'count == c'$c
钍anks提前
我不明白你想要做什么......也许你可以改写你的问题,例如? – Kent
感谢您的回复, 我有68个文件,每个文件containt行(csv)像2#203#8#2#26#70#0#1#81#441#Kleinchirurgischer urologischer Eingriff I#26#3# 我想要统计所有行,他们的11列长度等于208(例如这一行:列号11包含:Kleinchirurgischer urologischer Eingriff I - >不等于208,所以继续,如果等于208 count = count +1) –
awk不是shell。您正尝试在awk脚本中使用shell语法。这就像在COBOL程序中尝试在C程序或Java语法中使用shell语法一样。 Shell和awk是2种不同的语言。除此之外,那里的代码在任何语言中都没有任何意义 - 对于(i = 11; i <12),一步循环的意义是什么?你认为''print''中的'''是什么意思($ i)'会做什么?你认为'$ i 1'会做什么?阅读Arnold Robbins编写的第4版Effective Awk Programming,开始学习awk。 –