2016-12-01 48 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

很好的感覺。謝謝。 –