2017-10-16 188 views
0

我的目標是創建一個bash文件,該文件對大約16個文件中的行進行計數,每個文件都有一個日期,並將以下內容(16次)發送到.csv文件。Bash:使用cat和tr替換使用逗號替換字符串的問題

到目前爲止,我已經成功地計算了線,但.csv文件是凌亂,需要進行修整,並做出適合CSV:例如: 1500 FNB_EgTrans_20171004.txt

我的目標是使它看起來像這樣的:1500,EgTrans,20171004

有人能向我解釋爲什麼我使用TR與預期不工作的下面的方法?謝謝。 cat $reccnt | tr ' FNB_' ',' | tr '201' ',' < $reccnt

下面是詳細闡述的情況下,整個代碼是必要的:

#!/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 's/ FNB_/,/g' ${inputfile} > ${inputfile}.tmp 
sed 's/_201/,201/g' ${inputfile}.tmp > ${inputfile} 
rm ${inputfile}.tmp 

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; s/_201/,201/g' ${inputfile} > ${inputfile}.tmp 
mv ${inputfile}.tmp ${inputfile}