2016-12-01 122 views
0

我有多个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提前

+0

我不明白你想要做什么......也许你可以改写你的问题,例如? – Kent

+0

感谢您的回复, 我有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) –

+0

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。 –

回答

0

你想要这样的东西吗?

awk -F'#' '{c+=(length($11)==208?1:0)}END{printf "count=%d\n",c}' *.csv 
+1

@EdMorton我忘了换行符.. thx – Kent

2
$ awk -F'#' 'length($11)==208 {c++} END { print c+0 }' *.csv 
+1

很好的感觉。谢谢。 –