Unix 删除字段以使用awk或sed获取值
我有一个包含以下数据的文本文件Unix 删除字段以使用awk或sed获取值,unix,awk,grep,Unix,Awk,Grep,我有一个包含以下数据的文本文件 \ { Name "ABC", count 378 } \ { Name "DEF", count 5283 } \ { Name "BCD",
\ {
Name "ABC",
count 378
}
\ {
Name "DEF",
count 5283
}
\ {
Name "BCD",
count 152244
}
\ {
Name "XYZ",
count 5688
}
\ {
Name "1A2B",
count 1749132
}
我想要的结果是:--
我尝试使用以下命令删除非相关数据:--
但我无法超越它。有人能帮我吗?试试下面的awk,如果这对你有帮助,请告诉我
awk '/Name/{gsub(/\"|\,/,"",$2);val=$2;next} /count/{print val " , " $2}' Input_file
或
尝试以下awk,并让我知道这是否有助于你
awk '/Name/{gsub(/\"|\,/,"",$2);val=$2;next} /count/{print val " , " $2}' Input_file
或
这里还有一个
awk
你可以申请
$ awk '$2~/[0-9A-Z]/ {printf gsub(/"/,"",$2)?$2:" "$2"\n"}' file
简要说明
:查找与regex匹配的记录$2~/[0-9A-Z]/
[0-9A-Z]
:删除gsub(/“/,”,$2)
中的$2
,然后打印它“
- 这里有另一个
awk
认为您可以申请
$ awk '$2~/[0-9A-Z]/ {printf gsub(/"/,"",$2)?$2:" "$2"\n"}' file
简要说明
:查找与regex匹配的记录$2~/[0-9A-Z]/
[0-9A-Z]
:删除gsub(/“/,”,$2)
中的$2
,然后打印它“
RS
(至少是gawk和mawk),您可以这样做:
awk '!(NR%2) { print $3 " , " $5 }' RS='\\ *{|}' FS='[\n," ]+' infile
输出:
ABC,378
国防部,5283
BCD,152244
XYZ,5688
1A2B,1749132
如果您使用的awk支持正则表达式RS
(至少是gawk和mawk),您可以这样做:
awk '!(NR%2) { print $3 " , " $5 }' RS='\\ *{|}' FS='[\n," ]+' infile
输出:
ABC,378
国防部,5283
BCD,152244
XYZ,5688
1A2B,1749132
sed解决方案:
sed -En '/[{}]/d;N; s/Name *"([^"]+)".*count *([0-9]+).*/\1 , \2/p;' file
输出:
ABC , 378
DEF , 5283
BCD , 152244
XYZ , 5688
1A2B , 1749132
sed解决方案:
sed -En '/[{}]/d;N; s/Name *"([^"]+)".*count *([0-9]+).*/\1 , \2/p;' file
输出:
ABC , 378
DEF , 5283
BCD , 152244
XYZ , 5688
1A2B , 1749132