基于文本文件中的条件的Shell脚本,并编写机器人框架测试用例

基于文本文件中的条件的Shell脚本,并编写机器人框架测试用例

我正在研究机器人框架测试用例。我的要求是阅读下面的文件并根据位置比较值。例如:

  1. 以 3 开头的行。3 是 ID 号,我必须选择整行,并根据位置比较值。BRONYX 从第 9 个位置开始,应该与第 44 个位置 NEW YORK 的输出进行比较。在此示例中,BRONYX 应更改为 NEWYORK。如何根据位置提取字符串。

3^G^G^G^GBRONX^GNY^G10457^GUSA^G^G^GBRONX 应更改为 NEW YORK - 派生城市示例^G^G^G^GNEW YORK^GNY^G10457^G10457^G^GBRONX 县^G^GBRONX^G纽约^GUSA^G^G^G^G^G^G^G^G40.845600^G-73.898500^G325^GSPU^GZ1^G^G^G^G^G^G^ G^纽约-纽瓦克-泽西市,NY-NJ-PA 大都会统计区^G35620^GE020^GZC5X^GMMMMMVVV^G36005039500

示例2:选择 ID 为 2 的行,在此示例中,第 9 位的 MANHATTAN 应更改为 New York(位置为 40)。 2^G^G^G^GMANHATTAN^GNY^G^GUSA^G^G^GMANHATTAN 应更改为 NEW YORK - 派生城市示例^G^G^G^GNEW YORK^GNY^G^G^G^GNEW YORK ^G^G^G^GUSA^G^G^G^G^G^G^G^G40.783434^G-73.966249^G425^GSPU^GG3^G^G^G^G^G^G^G ^G^G^G^G^GMMMMMVVM^G

你能帮忙吗?

答案1

假设每个^G都是 Control-G 字符,即文件使用 ASCII 响铃字符 ( \a) 分隔,并且您要将每行的第 5 个字段设置为第 15 个字段的值:

awk -F '\a' 'BEGIN { OFS=FS } { $5 = $15 }; 1' file >newfile

这使用 将字段分隔符设置为 ASCII 响铃字符-F '\a'。然后,它将输出字段分隔符设置为相同的字符,并继续将第 5 个字段更新为第 15 个字段的值。代码中的尾随1会导致输出修改后的记录。结果将写入newfile本示例中称为的文件中。

您是否只影响以第一个字段23第一个字段开头的行,然后使用

awk -F '\a' 'BEGIN { OFS=FS } $1 == 2 || $1 == 3 { $5 = $15 }; 1' file >newfile

结果格式化为降价表,仅供演示。第4列是e列,第15列是o列。

A C d e F G H j k n p q r s t v w X y z BB 抄送 DD FF gg 呵呵 杰杰 kk 毫米 PP QQ RR SS TT 维维 WW
3 纽约 纽约 10,457 美国 布朗克斯应该改为纽约 - 派生城市示例 纽约 纽约 10,457 10,457 布朗克斯县 布朗克斯 纽约 美国 40.846… -73.898… 325 SPU Z1 纽约-纽瓦克-泽西市,纽约-新泽西-宾夕法尼亚大都会统计区 35,620 E020 ZC5X MMMMMVVV 36,005,039,500
2 纽约 纽约 美国 曼哈顿应该改为纽约 - 派生城市示例 纽约 纽约 纽约 美国 40.783… -73.966… 第425章 SPU G3 MMMMMVVM

答案2

欢迎来到SE。一些想法:

  • 通过管道传输文件hexdumpxxd查看可读表示。
  • 用于strings从文件中提取可读文本。我想这个可能对你有帮助。
  • 使用cut和/或head加号tail分别提取部分行或选择行。sed或者awk也可以成为你的朋友,但前提是你学会使用它们。这需要数年时间。

如何根据位置提取字符串

基于这个问题很难说。

应该与输出进行比较

您要求我们写出您的解决方案吗?你尝试了什么。您man awk按照建议阅读了吗?或者 Linux 没有提供印地语文档吗?

例子

如果字符串是固定长度的,并且如果该文件没有换行符,那么也许您可以使用一次cut调用:

$ echo my long string | cut -c4-8                                                 

输出:

long

注意。请使用编辑器或 Markdown 格式来更好地显示您的数据。

答案3

首先,我找到并将所有 Ctrl+G 字符替换为|(管道)使用

sed 's/^G/|/g' test.csv > output.csv

我能够使用打印整行

grep ^6 output.csv

6身份证号码。

6|LAKELINE MALL|||AUSTIN|TX||USA|||MALL EXAMPLE - POI|11066 PECAN PARK BLVD|||AUSTIN|TX|78613|78613||TRAVIS||AUSTIN|CEDAR PARK|USA||||||||30.468408|-97.803570|140|SPU|NA||||||||||||UUUUUVVM|

相关内容