AWK如果第3行以“与第二行合并”开头

时间:2016-12-26 17:04:41

标签: awk gawk

我有一些损坏的.txt文件,其中我需要修复前3行。

应该如何:

Template=1.0
SKU, Standard Price, Minimum Age Recommendation
sku, standard_prive, mg_recommendation

损坏后:

Template=1.0
SKU, Standard Price, "Minimum Age Recommendation
"
sku, standard_prive, mg_recommendation

在某些情况下:

Template=1.0
SKU, Standard Price, "Minimum Age
" Recommendation
sku, standard_prive, mg_recommendation

我需要检查第一行是否以引号开头,如果是,则将第3行与第二行合并。

否则我无法导入文件,因为它无法在第3行找到正确的标题。

AWK是首选,因为我已经用它执行其他任务。 我无法弄清楚,当我在awk循环中处于第二个值时,我如何检查第三行值。

4 个答案:

答案 0 :(得分:2)

$ awk '{printf "%s%s", (NR==1||/^\"/?"":ORS),$0}' file
How it should be:

Template=1.0
SKU, Standard Price, Minimum Age Recommendation
sku, standard_prive, mg_recommendation

After it got corrupted:

Template=1.0
SKU, Standard Price, "Minimum Age Recommendation"
sku, standard_prive, mg_recommendation

in some cases:

Template=1.0
SKU, Standard Price, "Minimum Age" Recommendation
sku, standard_prive, mg_recommendation

解决方案优先于不以"开头的记录。缺点是最后一条记录在没有换行的情况下结束。 END{print ""}解决了这个问题。

答案 1 :(得分:0)

艾达斯,请你试试,如果这对你有所帮助,请告诉我。

awk '{if($0 ~ /^\"/){printf("%s",Q);Q="";};print;Q=$0}'  Input_file

编辑:添加一个解决方案,它跳过Input_file中从字符串(")开始的那些行。它不会查找每行从"开始的行号。它会跳过。

awk '/^\"$/{next} 1' Input_file

答案 2 :(得分:0)

您可以像这样使用awk:

awk -F, 'FNR==2 {sub(/"/,"")} FNR==3 && $0 ="\"" {next} 1' yourfile > convertedfile
  • 在第2行它取代引用
  • 对于line3,如果是单个qoute,则会跳过此行

答案 3 :(得分:0)

awk '{sub(/\"/,"")}NF' file 

Template=1.0
SKU, Standard Price, Minimum Age Recommendation
sku, standard_prive, mg_recommendation