Unix 从文本文件格式化数据
我有以下格式的数据存储在一个文件中Unix 从文本文件格式化数据,unix,awk,Unix,Awk,我有以下格式的数据存储在一个文件中 ABC:9804 { "count" : 492, "_shards" : { "total" : 19, "successful" : 19, "failed" : 0 } } Bye ABC:95023 { "count" : 865, "_shards" : { "total" : 1
ABC:9804
{
"count" : 492,
"_shards" : {
"total" : 19,
"successful" : 19,
"failed" : 0
}
}
Bye
ABC:95023
{
"count" : 865,
"_shards" : {
"total" : 19,
"successful" : 19,
"failed" : 0
}
}
Bye
ABCC:128
{
"count" : 479,
"_shards" : {
"total" : 19,
"successful" : 19,
"failed" : 0
}
}
Bye
我正试图得到像这样的输出
ABC:9804 , 492
ABC:95023 , 865
ABCC:128 , 479
我尝试使用awk获得第一个like和第三个line,但这不起作用。awk解决方案:
awk '/^ABC.*:/{ abc=$0 }$0~/"count"/{ gsub(/[^0-9]+/,"",$0); print abc" , "$0 }' file
输出:
ABC:9804 , 492
ABC:95023 , 865
ABCC:128 , 479
awk解决方案:
awk '/^ABC.*:/{ abc=$0 }$0~/"count"/{ gsub(/[^0-9]+/,"",$0); print abc" , "$0 }' file
输出:
ABC:9804 , 492
ABC:95023 , 865
ABCC:128 , 479
输入
输出
呆呆地看
可读性更好
awk -F':' -v RS='[{},\n]' '
/ABC.*|\"count"/{
gsub(/[\n\t ]+/,"");
printf /\"/? ", " $2 "\n": $0
}
' infile
awk -F'[ ,]' -v OFS=", " '
/^[ \t]+(ABC.*|\"count\"[ ]?):/{
sub(/^[ \t]+/,"");
printf /\"/ ? OFS $(NF-1) RS: $0
}
' infile
不呆呆地看
可读性更好
awk -F':' -v RS='[{},\n]' '
/ABC.*|\"count"/{
gsub(/[\n\t ]+/,"");
printf /\"/? ", " $2 "\n": $0
}
' infile
awk -F'[ ,]' -v OFS=", " '
/^[ \t]+(ABC.*|\"count\"[ ]?):/{
sub(/^[ \t]+/,"");
printf /\"/ ? OFS $(NF-1) RS: $0
}
' infile
输入
输出
呆呆地看
可读性更好
awk -F':' -v RS='[{},\n]' '
/ABC.*|\"count"/{
gsub(/[\n\t ]+/,"");
printf /\"/? ", " $2 "\n": $0
}
' infile
awk -F'[ ,]' -v OFS=", " '
/^[ \t]+(ABC.*|\"count\"[ ]?):/{
sub(/^[ \t]+/,"");
printf /\"/ ? OFS $(NF-1) RS: $0
}
' infile
不呆呆地看
可读性更好
awk -F':' -v RS='[{},\n]' '
/ABC.*|\"count"/{
gsub(/[\n\t ]+/,"");
printf /\"/? ", " $2 "\n": $0
}
' infile
awk -F'[ ,]' -v OFS=", " '
/^[ \t]+(ABC.*|\"count\"[ ]?):/{
sub(/^[ \t]+/,"");
printf /\"/ ? OFS $(NF-1) RS: $0
}
' infile
不它并不完全是JSON。我会改正我的题目。不。。它并不完全是JSON。我将更正我的主题。您也可以将第一位保存到变量中,并在找到第二位时使用普通的
打印,但这两种方法都有效。@TomFenech,好的,现在它变短了一点。您也可以将第一位保存到变量中,并在找到第二位时使用普通的打印,但这两种方法都有效。@TomFenech,好吧,现在它变短了一点