用awk

2017-06-02 33 views
-5

操縱從文件輸出我有文件中UNIX用awk

a,b,c,d 
e,f,g,h 
u,v,x,y 

,我想打印的第一關口和所有其他山坳它seperatly

a,b 
a,c 
a,d 
e,f 
e,g 
e,h 

等。

在此先感謝

+2

你爲自己嘗試了什麼? _和_爲什麼在'e,g'記錄後有'''? – Inian

+0

因爲我有麻煩,爲什麼我會問這個問題,並且因爲這是一個微不足道的錯字 –

+3

@AbBennett是的,據瞭解,你問這個問題是因爲你被困在問題中......但是關於獲得幫助用你已經試過的代碼,而不是詢問完整的代碼... – Sundeep

回答

1

這可能與此Perl的一個班輪

perl -F, -anle '[email protected];print"$first,$_"[email protected]' <input.txt 

它是如何工作要做:

瞭解交換機只需鍵入perl -h

  • -a結合-F,:劈叉(缺省變量)輸入與,合併(陣列用於自動分離)@F
  • -n:loop通過線
  • -l:線行的處理格格端和打印後添加新行
  • -e:內嵌程序

有關特殊的變量和函數信息,請參閱perldoc perlvarperldoc perlfun

  • 移:刪除陣列前的元​​素
+0

謝謝,完美的答案 –

5

如果你在將來面對這樣的問題,我會建議你試着開始GAWK: Effective AWK Programming by Arnold D. Robbins


至於答案,這是非常簡單的Awk

awk 'BEGIN{FS=OFS=","}{for(i=2;i<=NF;i++) print $1,$i}' file 

根據需要產生輸出。

a,b 
a,c 
a,d 
e,f 
e,g 
e,h 
u,v 
u,x 
u,y 

Awk作品通過一次處理輸入線一個。並且有Awk提供的特殊子句,BEGIN{}END{},它包含了在文件處理之前和之後運行的動作。

所以文件處理髮生之前的部分BEGIN{FS=OFS=","}設置,並FSOFSAwk特殊變量,代表輸入和輸出的字段分隔符。既然你提供的由,去限制一個文件,你需要通過設置FS=","也將其打印回.csv格式需要設置OFS=","

命令的主要部分來自後BEGIN子句來解析它,它有一個循環的for循環,直到當前的行(這裏的NF的值是4)的最大字段數。一旦設置了適當的解除限制器,您可以通過$1,$2 .. $NF訪問各個字段。

環路我開始在$2即從2 第二去限制記錄到最後一個記錄和循環的作用部分開始被打印1 ST場和任何字段中環遇到用$i表示。每個print操作都會以新行打印值。所以隨着你在循環中的進展,你可以按照預期打印字段。