我有一些损坏的.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循环中处于第二个值时,我如何检查第三行值。
答案 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
答案 3 :(得分:0)
awk '{sub(/\"/,"")}NF' file
Template=1.0
SKU, Standard Price, Minimum Age Recommendation
sku, standard_prive, mg_recommendation