2012-08-02 40 views
-2

我在這段代碼上磕磕絆絆,我試圖通過分隔符來解析文件「;」並將其保存到其他新文件中。但現在它將原始內容保存到新文件中而不會分開。需要了解shell awk代碼

cat $file | awk 'BEGIN {FS=";"}{ print > "final.txt"}END{ print "parsed now..."}' 

但它給我的原始文件內容。我想,print將打印由awk處理的文件的所有列。

有人能幫我嗎?

非常感謝

+0

還是不明白究竟你在找for.Make你的問題,如果能夠更加清晰與輸入和輸出的例子。 – Vijay 2012-08-02 12:13:20

回答

0

如果我理解你的權利,問題是,你不從哪裏得到輸出「;」應該用「」(這是標準的OFS)代替?
如果這就是爲什麼不做

sed 's/;/ /g' $file 

反正這個問題 - 在AWK AFAIK print意味着print $0其中$0僅僅是輸入線。如果該行中沒有字段明確改變,$0根本不會更新。我的解決方法通常是僞造更新$1=$1以強制更新$0。也許有一個 「乾淨」 的方式...

cat $file | awk 'BEGIN {FS=";"}{$1=$1;print > "final.txt"}END{ print "parsed now..."}' 

編輯:

awk -F";" '{print $4}' $file >final.txt 
+0

謝謝,我該如何打印第四欄?能否請你解釋一下如何打印哪一列的邏輯...... – doniyor 2012-08-02 11:55:58

+1

有沒有需要貓 – Vijay 2012-08-02 11:58:26

+1

你也應該修復貓的無用用途。另見http://partmaps.org/era/unix/award.html – tripleee 2012-08-02 11:59:13

0

打印默認會打印$ 0,這是整條生產線。 所以無論你得到的是正確的。

我可以知道你確實需要嗎? 你是否需要拆卸分離器?

第4列可以打印以下:

awk 'BEGIN {FS=";"}{ print $4 > "final.txt"}END{ print "parsed now..."}' $file 
+0

謝謝,我真正需要的是我有一個包含一些信息的大文件,並且在每50行中有一個;我想將整個文件解析爲粒子,在這種情況下,列將理解awk的邏輯。 – doniyor 2012-08-02 12:03:40