2017-10-16 184 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}