AWK 如果第 3 行以 " 开头,则将其与第二行合并
AWK if 3rd line starts with " merge it with second line
我有一些损坏的 .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 行找到正确的标题。
AWK 是首选,因为我已经用它执行了其他任务。
我不知道,当我在 awk 循环中处于第二个值时如何检查第三行值。
Aidas,能否请你尝试关注一下,如果对你有帮助,请告诉我。
awk '{if([=10=] ~ /^\"/){printf("%s",Q);Q="";};print;Q=[=10=]}' Input_file
编辑: 再添加一个解决方案,它会跳过 Input_file 中从 string(") 开始的那些行。它不会查找每个行号从 " 开始的行会跳过。
awk '/^\"$/{next} 1' Input_file
你可以这样使用 awk:
awk -F, 'FNR==2 {sub(/"/,"")} FNR==3 && [=10=] ="\"" {next} 1' yourfile > convertedfile
- 在第 2 行,它没有替换引号
- 对于第 3 行,如果它是单个 qoute,则跳过此行
$ awk '{printf "%s%s", (NR==1||/^\"/?"":ORS),[=10=]}' 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 ""}
解决了这个问题。
awk '{sub(/\"/,"")}NF' file
Template=1.0
SKU, Standard Price, Minimum Age Recommendation
sku, standard_prive, mg_recommendation
我有一些损坏的 .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 行找到正确的标题。
AWK 是首选,因为我已经用它执行了其他任务。 我不知道,当我在 awk 循环中处于第二个值时如何检查第三行值。
Aidas,能否请你尝试关注一下,如果对你有帮助,请告诉我。
awk '{if([=10=] ~ /^\"/){printf("%s",Q);Q="";};print;Q=[=10=]}' Input_file
编辑: 再添加一个解决方案,它会跳过 Input_file 中从 string(") 开始的那些行。它不会查找每个行号从 " 开始的行会跳过。
awk '/^\"$/{next} 1' Input_file
你可以这样使用 awk:
awk -F, 'FNR==2 {sub(/"/,"")} FNR==3 && [=10=] ="\"" {next} 1' yourfile > convertedfile
- 在第 2 行,它没有替换引号
- 对于第 3 行,如果它是单个 qoute,则跳过此行
$ awk '{printf "%s%s", (NR==1||/^\"/?"":ORS),[=10=]}' 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 ""}
解决了这个问题。
awk '{sub(/\"/,"")}NF' file
Template=1.0
SKU, Standard Price, Minimum Age Recommendation
sku, standard_prive, mg_recommendation