从文本文件中提取多个匹配模式

阿恩普里

我需要从文本文件的每一行中提取所有K [AZ] {4}和US [C,W] [0-9] {8}值。

我正在使用下面的代码来尝试实现此目的,但是,我需要根据在给定行中存在两个值的情况(即以下数据中的最后三行)来提取这些值

尝试输入的代码:

#Filters out any values matching K[A-Z]{4}
grep -Po '"\K[A-Z]{4}\b' usc.matched > out.1

#Filters out any values matching US[C,W][0-9]{8}
grep -Po '\bUS\w*' usc.matched > out.2

#Pastes two datasets together, separated by a comma
paste -d',' out.1 out.2 > stations.filtered

#Removes any lines that do not lead with "K"
sed -i '/^[^K]/d' stations.filtered

JSON数据:

{"sids": ["94737 1", "RUT 3", "KRUT 5"], "name": "RUTLAND STATE AP"},
{"sids": ["54740 1", "VSF 3", "KVSF 5", "USW00054740 6"], "name": "SPRINGFIELD HARTNESS AP"},
{"sids": ["94601 1", "RKD 3", "KRKD 5"], "name": "ROCKLAND KNOX CO RGNL AP"},
{"sids": ["20B 3"], "name": "ROCKLAND STN"},
{"sids": ["177250 2", "USC00177250 6"], "name": "ROCKLAND"},
{"sids": ["177255 2", "USC00177255 6", "RCKM1 7"], "name": "ROCKLAND"},
{"sids": ["177260 2"], "name": "ROCKLAND MOORING LBS"},
{"sids": [], "name": "ROCKLAND"},
{"sids": ["14612 1"], "name": "ROCKLAND"},
{"sids": ["274380 2", "USC00274380 6"], "name": "KEARSARGE"},
{"sids": ["192770 2", "USC00192770 6"], "name": "FISKDALE"},
{"sids": ["US1CTNL0005 6", "CTNL0005 10"], "name": "OAKDALE 2.6 WNW"},
{"sids": ["063989 2", "USC00063989 6"], "name": "LAKE KONOMOC"},
{"sids": ["14740 1", "14721 1", "063456 2", "069704 2", "BDL 3", "72508 4", "KBDL 5", "USW00014740 6", "BDL 7"], "name": "HARTFORD-BRADLEY INTL AP"},
{"sids": ["94702 1", "060806 2", "BDR 3", "72504 4", "KBDR 5", "USW00094702 6", "BDR 7"], "name": "IGOR I SIKORSKY MEMORI AP"},
{"sids": ["54734 1", "DXR 3", "KDXR 5", "USW00054734 6"], "name": "DANBURY MUNI AP"},

电流输出:

KRUT,
KVSF,USW00054740
KRKD

USC00177250
USC00177255


USC00274380
USC00192770
US1CTNL0005
USC00063989
KBDL,USW00014740
KBDR,USW00094702
KDXR,USW00054734

预期产量:

KVSF,USW00054740
KBDL,USW00014740
KBDR,USW00094702
KDXR,USW00054734
阿努巴瓦

您可以使用:

awk -F '[][" \t{},:]+' '{
a=b=""
for(i=2; i<=NF; i++)
   if ($i ~ /^K[A-Z]{3}$/)
      a=$i
   else if ($i ~ /^US[CW][0-9]+/)
      b=$i
   if (a != "" && b != "")
      print a, b
}' OFS=, file

KVSF,USW00054740
KBDL,USW00014740
KBDR,USW00094702
KDXR,USW00054734

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

定期从文本文件中提取模式之间的文本

从python中的文本文件中提取多个模式(单个def函数)

从文本文件中提取多个模式并将其保存到熊猫数据框[python]

从文本文件中提取模式之间的数据

从遵循模式的大文本文件中提取行

在 Python 中匹配和从文本文件中提取

使用python从多个文本文件中提取数据

如何从文本文件中提取多个圣经经文?

从文本文件中提取列

从文本文件中提取数字

从文本文件中提取单词

从文本文件中提取单词

从文本文件中提取列

从文本文件中提取块

从文本文件中提取数据

从文本文件中提取时间

在 R 编程中使用模式和表达式从文本文件中提取多个数据帧

使用python从文本文件中的特定模式中提取文本

使用Python从多个文本文件中的多个字典中提取键值对

从巨大的(强制)文本文件中提取两种模式之间的数据

从纯文本文件中的复杂模式中提取数值数据并产生表格输出

从文本文件中提取模式的算法/C++代码

如何针对每个单独的文件名从多个文本文件中提取数据?

从文本文件中提取一个单词匹配的名称

遍历对象向量并找到与从文本文件中提取的变量匹配的变量

从文本文件匹配的标题子字符串中提取列

从文本文件中提取文本的Python程序?

从文本文件Python中提取括号之间的文本

从R中的多个文本文件中提取第一行