2012-11-29 155 views
4

我想下面的輸入文件(ABC)輸出文件(XYZ)轉換:轉換文件到另一個文件通過Shell腳本

$more abc 
"2005057400BPI","TS.1.BPI.20121112120000.000#S10S#.txt.xml" 
"2005057408BPI","TS.1.BPI.20121112120000.000#S10S#.txt.xml" 
"2005057488BPI","TS.1.BPI.20121112120000.000#S10S#.txt.xml" 

$more xyz 
"2005057400BPI",TS.1.BPI.20121112120000.000.txt 
"2005057408BPI",TS.1.BPI.20121112120000.000.txt 
"2005057488BPI",TS.1.BPI.20121112120000.000.txt 

文件ABC aorund包含35K線。我正在做轉換爲:

$perl -pi -e 's/"//g' abc 
$cut -d'.' -f1-5 abc > xyz 
$perl -pi -e 's/.....$/\.txt/g' xyz 
$perl -pi -e 's/#//g' xyz 

$perl -pi -e 's/^/"/g' xyz 
$perl -pi -e 's/,/",/g' xyz 

是否有任何其他方式可以用更少的命令更快地完成它。

回答

2

使用Perl:

perl -plne 's/#.*/.txt/;s/,"/,/;' file 

添加選項-i以便更新文件。

+0

@steve:感謝您指出史蒂夫:) ..現在更新.. – Guru

2

隨着SED:

sed 's/"\(TS.*\)#S10S#.txt.xml"/\1.txt/' input 
0

一個使用sed方式:

sed 's/\(.*,\)"\([^#]*\).*/\1\2.txt/' file 

結果:

"2005057400BPI",TS.1.BPI.20121112120000.000.txt 
"2005057408BPI",TS.1.BPI.20121112120000.000.txt 
"2005057488BPI",TS.1.BPI.20121112120000.000.txt 
+1

'sed'還帶有in-place功能,帶'-i'標誌。但是,並不是所有的「sed」都是平等的。所以看到你的版本手冊頁。 – Steve

相關問題