2014-10-12 46 views
1

我有一個用Cedilla分隔的文件,但是記錄在一行中。我必須將其轉換爲多行文件。用於將單行分隔到多行文件的Unix腳本

樣本記錄:

P002365Ç1200ÇMastercardÇcarolinaÇBasildonÇEnglandÇUnited kingdomÇP002368Ç2100ÇVisaÇGouyaÇEchucaÇVictoriaÇAustraliaÇP002373Ç3600ÇMastercardÇRenee ElisabethÇTel AvivÇTel AvivÇIsraelÇP002382Ç6300ÇDinersÇbarbaraÇHyderabadÇAndhra PradeshÇIndia 

需要轉換到:

P002365Ç1200ÇMastercardÇcarolinaÇBasildonÇEnglandÇUnited Kingdom  
P002368Ç2100ÇVisaÇGouyaÇEchucaÇVictoriaÇAustralia  
P002373Ç3600ÇMastercardÇRenee ElisabethÇTel AvivÇTel AvivÇIsrael  
P002382Ç6300ÇDinersÇbarbaraÇHyderabadÇAndhra PradeshÇIndia 

我們能做到這一點使用awk命令?

+0

這是你在找什麼? http://stackoverflow.com/questions/15559979/split-file-on-nth-occurrence-of-delimiter HTHS – YFP 2014-10-12 11:47:40

+1

如果您不僅可以使用AWK那麼這應該爲你工作:perl的-pe的|Ç| \ n | g'file.txt | paste-dÇ - - - - - - - – 2014-10-12 11:55:49

回答

4

你可以使用這樣的事情:

awk -FÇ '{for (i=1;i<=NF;++i) printf "%s%s", $i, (i%7==0?RS:FS)}' file 
P002365Ç1200ÇMastercardÇcarolinaÇBasildonÇEnglandÇUnited kingdom 
P002368Ç2100ÇVisaÇGouyaÇEchucaÇVictoriaÇAustralia 
P002373Ç3600ÇMastercardÇRenee ElisabethÇTel AvivÇTel AvivÇIsrael 
P002382Ç6300ÇDinersÇbarbaraÇHyderabadÇAndhra PradeshÇIndia 

怎麼在這裏上的故障:

  • -FÇ - 此命令行參數FS變量(字段分隔符)設置爲Ç字符
  • for循環(每行執行)循環從1到NF(Number [of] Fields)
  • 在每次迭代中,一個printf被執行的打印兩個字符串(%s%s),第一個是實際的字段($i),第二個是的內容的兩個選項中的一個:
    1. 如果字段號是一個多7 *,插入換行符(RS記錄分隔符),
    2. 否則,打印FS。 (定義爲Ç字符)。

* 7號,是因爲它是你根據你提供的示例輸出拆分記錄定義中使用「任意」。

+0

'RS'(記錄分隔符)是這種情況下的換行符? – Lix 2014-10-12 11:58:52

+0

@默認情況下,是的。 – 2014-10-12 12:01:06

+1

正如我懷疑:P酷..我要添加一個細節在這裏發生了什麼(主要是爲了確保我自己理解)。請讓我知道如果我得到錯誤:) – Lix 2014-10-12 12:02:06

0

這可能爲你工作(GNU SED):

sed 's/Ç/\n/7;P;D' file 

這一個換行符替換每7 Ç

相關問題