我有一个包含以下数据的文本文件。
\ {
Name "ABC",
count 378
}
\ {
Name "DEF",
count 5283
}
\ {
Name "BCD",
count 152244
}
\ {
Name "XYZ",
count 5688
}
\ {
Name "1A2B",
count 1749132
}
我想要的结果如下: -
ABC , 378
DEF , 5283
BCD , 152244
XYZ , 5688
1A2B ,1749132
我尝试使用以下命令删除非重要数据: -
grep -e '^ ' result.txt
但我无法超越它。有人可以帮助我吗?
答案 0 :(得分:2)
尝试关注awk并告诉我这是否对您有所帮助。
awk '/Name/{gsub(/\"|\,/,"",$2);val=$2;next} /count/{print val " , " $2}' Input_file
OR
awk -F'[",]' '/Name/{val=$2;next} /count/{split($0, a," ");print val,a[2]}' OFS=" , " Input_file
答案 1 :(得分:1)
以下是您可以申请的另一个awk
,
$ awk '$2~/[0-9A-Z]/ {printf gsub(/"/,"",$2)?$2:" "$2"\n"}' file
简要说明,
$2~/[0-9A-Z]/
:找到匹配正则表达式[0-9A-Z]
gsub(/"/,"",$2)
:删除"
中的$2
,然后将其打印答案 2 :(得分:1)
如果你使用支持正则表达式RS
的awk(至少是gawk和mawk),你可以这样做:
awk '!(NR%2) { print $3 " , " $5 }' RS='\\ *{|}' FS='[\n," ]+' infile
输出:
ABC , 378
DEF , 5283
BCD , 152244
XYZ , 5688
1A2B , 1749132
答案 3 :(得分:0)
sed 解决方案:
sed -En '/[{}]/d;N; s/Name *"([^"]+)".*count *([0-9]+).*/\1 , \2/p;' file
输出:
ABC , 378
DEF , 5283
BCD , 152244
XYZ , 5688
1A2B , 1749132