2017-10-16 8 views
0

내 목표는 각각 날짜가있는 약 16 개의 파일에 줄을 계산하고 .csv 파일로 다음 (16 번)을 보내는 bash 파일을 만드는 것입니다. 파일.Bash : cat 및 tr을 사용하여 문자열을 쉼표로 바꾸는 문제

지금까지 내가 선을 계산하는 데 성공했지만, .csv 파일은 지저분하고 정돈 및 CSV에 적합 할 필요가있다 : 예 : 1500 FNB_EgTrans_20171004.txt

내 목표는 모양을 만드는 것입니다 이 : 1500,EgTrans,20171004

누군가가 나에게 설명 할 이유는 예상대로 고양이가 작동하지 않습니다와 TR를 사용하여 내 아래 방법은? 감사.

#!/bin/bash 
cd /ssinput/NY_AML/ 
reccnt=ny_row_count.csv 
activedate='100000' 
if [ -e $reccnt ]; 
then 
rm $reccnt 
else 
touch $reccnt 
chmod 755 $reccnt 
fi 
ls -t1 FNB*|head -15 |cut -c 13- > ny_activedate.txt #second tail or cut? 
activedate=$(cat ny_activedate.txt) 
echo $activedate 
wc -l *$activedate | head -16 > $reccnt 
reccnt="${reccnt##*()}" 
cat $reccnt | tr 'FNB' ',' | tr '201' ',' < $reccnt` 
+5

'tr'은 단어가 아닌 문자를 번역합니다. 맨 페이지에서 말한 것처럼. –

+2

* 고양이 *의 쓸모없는 사용이 감지되었습니다. 그리고 네, * sed *를 사용하십시오. – 0andriy

+1

표현식에서 '... | tr '201' ','<$ reccnt', 여기서'tr'이 입력을 기대합니까? 파이프 또는 파일에서 읽습니까? –

답변

0

당신은

inputfile=ny_row_count.csv 
sed -e 's/ FNB_/,/g' -e 's/_201/,201/g' ${inputfile} > ${inputfile}.tmp 
mv ${inputfile}.tmp ${inputfile} 

또는

inputfile=ny_row_count.csv 
sed 's/ FNB_/,/g' ${inputfile} > ${inputfile}.tmp 
sed 's/_201/,201/g' ${inputfile}.tmp > ${inputfile} 
rm ${inputfile}.tmp 

을 변경할 수 있습니다 아래 cat $reccnt | tr ' FNB_' ',' | tr '201' ',' < $reccnt

사례 정교의 전체 코드가 필요하다