用于将单行分隔为多行文件的Unix脚本

时间:2014-10-12 11:25:41

标签: unix awk

我有一个用Cedilla分隔的文件,但记录只有一行。我必须将其转换为多行文件。

样本记录:

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命令实现这一目标吗?

2 个答案:

答案 0 :(得分: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是“任意”使用的,因为它是根据您提供的示例输出拆分记录的定义。

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

这会使用换行符替换每7个Ç