我可以使用 grep 提取 CSV 文件的单列吗?

2023-11-22

我正在努力解决我必须尽快解决的问题。 我有一个 csv 文件,字段用 ; 分隔。 我被要求使用 grep 创建一个 shell 命令,使用正则表达式仅列出第三列。我不能使用剪切。这是一种练习。

我的文件是这样的:

1;Evan;Bell;39;Obigod Manor;Ekjipih;TN;25008
2;Wayne;Watkins;22;Lanme Place;Cotoiwi;NC;86578
3;Danny;Vega;25;Fofci Center;Momahbih;MS;21027
4;Larry;Robinson;23;Bammek Boulevard;Gaizatoh;NE;27517
5;Myrtie;Black;20;Savon Square;Gokubpat;PA;92219
6;Nellie;Greene;23;Utebu Plaza;Rotvezri;VA;17526
7;Clyde;Reynolds;19;Lupow Ridge;Kedkuha;WI;29749
8;Calvin;Reyes;47;Paad Loop;Beejdij;KS;29247
9;Douglas;Graves;43;Gouk Square;Sekolim;NY;13226
10;Josephine;Estrada;48;Ocgig Pike;Beheho;WI;87305
11;Eugene;Matthews;26;Daew Drive;Riftemij;ME;93302
12;Stanley;Tucker;54;Cure View;Woocabu;OH;45475
13;Lina;Holloway;41;Sajric River;Furutwe;ME;62184
14;Hettie;Carlson;57;Zuheho Pike;Gokrobo;PA;89098
15;Maud;Phelps;57;Lafni Drive;Gokemu;MD;87066
16;Della;Roberson;53;Zafe Glen;Celoshuv;WV;56749
17;Cory;Roberson;56;Riltav Manor;Uwsupep;LA;07983
18;Stella;Hayes;30;Omki Square;Figjitu;GA;35813
19;Robert;Griffin;22;Kiroc Road;Wiregu;OH;39594
20;Clyde;Reynolds;19;Lupow Ridge;Kedkuha;WI;29749
21;Calvin;Reyes;47;Paad Loop;Beejdij;KS;29247
22;Douglas;Graves;43;Gouk Square;Sekolim;NY;13226
23;Josephine;Estrada;48;Ocgig Pike;Beheho;WI;87305
24;Eugene;Matthews;26;Daew Drive;Riftemij;ME;93302

我想我应该使用类似的东西: cat

Thanks.


适合工作的工具:使用awk or cut

假设您要将第三列与特定字段进行匹配:

awk -F';' '$3 ~ /Foo/ { print $0 }' file.txt

...将打印第三个字段包含的任何行Foo。 (改变print $0 to print $3将仅打印第三个字段)。

如果您只想打印第三列,请使用cut: cut -d';' -f3 <file.txt

错误的工具:使用 GNUgrep

在一个系统上grep-o选项,您可以将两个实例链接在一起 - 一个实例修剪第四列之后的所有内容(并删除少于四列的行),另一个实例仅获取最后剩余的列(因此,第四列):

str='foo;bar;baz;qux;meh;whatever'
grep -Eo '^[^;]*[;][^;]*[;][^;]*[;][^;]*' <<<"$str" \
  | grep -Eo '[^;]+$'

解释一下它是如何工作的:

  • ^,在方括号之外,仅匹配行首。
  • [^;]*匹配任何字符,除了;零次或多次。
  • [;]仅匹配字符;.

...因此,每个[^;]*[;]正则表达式中的匹配单个字段,无论该字段是否包含文本。将其中四个放在第一阶段意味着我们仅匹配字段,并且grep -o tells grep仅发出它成功匹配的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用 grep 提取 CSV 文件的单列吗? 的相关文章

  • 有哪些基于对象的 shell?

    我打算写一个面向对象的shell 基于Python 我已经有很多想法了 但在实现它之前 我想通过一些现有的 shell 来激发我的灵感 我所说的面向对象的基本意思是 参数不仅仅是字符串数组 而且是对象数组 返回值也是一个对象 不仅有 std
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 如何使用 git hook pre-merge-commit 获取原始合并分支名称

    我正在尝试使用新的 git hook pre merge commit 创建一个特定的脚本 但它没有参数 有什么解决方法可以让我获得正在合并的分支的名称吗 例子 在分支 myBranch 上 我调用 git merge testingBra
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 使用 shell=True 将 PATH 设置为 bitbake 的“source”在 Python 中没有效果

    下面是shell脚本中的代码 source proj common tools repo etc profile d repo sh repo project init branch repo project sync source pok
  • Bash 中所有匹配的^单词^替换^?

    为了澄清 我正在寻找一种方法来执行global搜索并替换先前使用的命令 word replacement 似乎只替换了第一场比赛 有没有一些set我无法选择的选项 尝试这个 echo oneone oneone gs one two Rep
  • 将 JSON 导出到环境变量

    如果我有这样的 JSON hello1 world1 testk testv 我想将每个键值对导出为环境变量 如何通过 shell 脚本来做到这一点 例如 当我在终端上写时 echo hello1 world1应该打印其他键值对吗 注意 上
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • AWK:递归下降 CSV 解析器

    响应一个BASH 中的递归下降 CSV 解析器 https codereview stackexchange com questions 11727 need some advice or help with translation and
  • 如何从 LaTeX 执行 shell 脚本?

    我正在尝试在 LaTeX 中执行以下操作 documentclass article begin document execute usr local bin my shell script sh end document 想法是执行 us
  • 将多个 csv 文件连接成具有相同标头的单个 csv

    我目前正在使用以下代码导入 6 000 个 csv 文件 带标题 并将它们导出到单个 csv 文件 带单个标题行 import csv files from folder path r data US market merged data
  • 如何在 iPhone 应用程序中使用正则表达式以 , (逗号)分隔字符串

    我必须读取包含三列的 csv 文件 在解析 csv 文件时 我得到了这种格式的字符串克里斯托弗 巴斯 为心爱的国家哭泣 期末论文 电子邮件受保护 cdn cgi l email protection 我想将三列的值存储在一个数组中 所以我使
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • 如何使用 R 中带引号的字符值内的序列读取 CSV?

    这是一个包含两个字符列的 CSV 文件 key value a 所有字符值都用双引号引起来 并且有一个顺序 在值之一内 转义引号加分隔符 我无法通过 read csv readr 中的 read csv 或 data table 中的 fr
  • Grep 批量 ping

    寻找一种更好的方法来做到这一点 而不是我习惯的 手动 方法 因为这是一个我必须定期经历的过程 我有一系列要 ping 的 IP 从10 0 1 15 to 10 0 50 15 第三个八位位组指的是物理位置 最后一个八位位组指的是该位置处的
  • 每次重新运行终端时,我都必须输入 export PATH=~/anaconda/bin:"$PATH"

    我已经安装了 Anaconda for Mac 但出现了一些问题 当我输入命令时which conda or which ipython I get conda not found and ipython not find 然后我找到这个命
  • 如何扩展路径中的波形符(~)[重复]

    这个问题在这里已经有答案了 我有一个 shell 脚本 可以从用户那里获取目录路径 但我需要检查目录是否为空 如果用户将他的主路径与 而不是绝对路径 所以我无法检查它ls echo Specify your project root dir
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • 测试 bash shell 脚本[重复]

    这个问题在这里已经有答案了 有人可以解释一下如何测试 bash shell 脚本吗 例如 我有一个 sh 文件 其中包含此代码 bin sh for file in txt do mv file basename file txt doc

随机推荐

  • System.Threading.Monitor.Enter() 如何工作?

    我有一个问题 Monitor Enter 是如何工作的 我研究了 net框架源代码 它只显示了这一点 System Security SecurityCritical auto generated ResourceExposure Reso
  • Android 10 默认短信应用程序对话框未显示

    我已成功修改我的应用程序以用作默认短信应用程序 问题在于应该提示用户将我的应用程序设置为默认应用程序的对话框 它似乎适用于旧版本 但不适用于 android 10 模拟器 My code fun Activity askToBeDefaul
  • 如何显示“您确定要离开此页面吗?”何时进行更改?

    在 stackoverflow 中 如果您开始进行更改 然后尝试离开该页面 则会出现一个 javascript 确认按钮并询问 您确定要离开该页面吗 布利巴拉布洛 以前有人实施过这个吗 我如何跟踪已提交的更改 我相信我自己可以做到这一点 我
  • android 将 XML 视图转换为位图而不显示它

    我正在尝试设置我的地图集群的视图 我正在从 XML 扩充视图并根据簇大小设置文本 并且我想显示该视图 在下面的代码中我得到一个空位图作为回报 private Bitmap createClusterBitmap int clusterSiz
  • 在 Vaadin 7 中调用 VaadinSession getAttribute 时需要锁定

    我知道调用 setAttribute link 但是 getAttribute 呢 它是否正确 public Object getMyAttribute return VaadinSession getCurrent getAttribut
  • 为什么内核中不使用SIMD指令?

    我在内核中找不到太多 SIMD 指令 如 SSE AVX 的使用 除了一处用于加速 RAID6 奇偶校验计算的地方 Q1 有什么具体原因或者只是缺乏用例吗 Q2 如果我想在设备驱动程序中使用 SIMD 指令 今天需要做什么 Q3 将像 IS
  • Paypal PHP REST 服务 - “访问令牌没有所需的范围”

    我正在使用 Paypal REST SDK 用 PHP 进行编码 我已将我的 Sandbox 帐户设置为使用澳元 在意识到我的初始交易是美元并且交易被保留后 我解决了这个问题 使用修改后的代码 我尝试创建付款 我假设我会返回一个 URL 该
  • Delphi/Android在哪里搜索本地语言库?

    我想向 Delphi Android 应用程序添加 MIDI 功能 MIDI 可通过 SoniVox 库使用 该库可通过 Android NDK 访问 可以找到该驱动程序的示例here 该驱动程序是用 C 编写的 使用 NDK 可以创建一个
  • Azure有像AWS的CloudFormation一样的IaC工具吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我将 GCP 与 AWS 进行了比较 两者的 IaC 工具都是 Deploy Manager 和 CloudFormation 蔚蓝呢 Azure有
  • 有没有办法将 Python 程序编译为二进制并将其与 Scratch Dockerfile 一起使用?

    我最近一直在研究 docker 镜像 我看见这个泊坞窗文档关于使用FROM scratch 我想看看我能走多远 只是为了好玩 我用Python编程 该文档说将示例 C 程序编译为二进制文件 将其复制到容器中 然后运行它 在容器中 我无法运行
  • 删除 .php 扩展名(明确编写)以获得友好的 URL [关闭]

    Closed 这个问题是无关 目前不接受答案 htaccess 删除我网站文件的 php 扩展名 RewriteEngine on RewriteBase RewriteCond SCRIPT FILENAME d RewriteCond
  • 非详尽模式的更好例外情况

    当 GHCi 在运行时发现调用生成的值与函数的模式匹配不匹配时 是否有办法让 GHCi 生成更好的异常消息 它目前给出了产生非详尽模式匹配的函数的行号 虽然有时很有帮助 但确实需要一轮调试 有时我觉得一遍又一遍地做同一组事情 因此 在尝试制
  • 如何在 Django 模板中获取我的网站的域名?

    如何从 Django 模板中获取当前站点的域名 我尝试查看标签和过滤器 但什么也没有 如果您想要实际的 HTTP 主机标头 请参阅 Daniel Roseman 对 Phsiao 答案的评论 另一种选择是如果您使用的是贡献站点框架 您可以为
  • 删除 Tkinter 窗口上的 TK 图标

    如何从窗口标题栏中删除 tkinter 图标 在 Windows 上 步骤1 使用图标编辑器或类似网站创建透明图标RW设计师 另存为transparent ico 第二步 from tkinter import tk Tk tk iconb
  • 获取 MVC 捆绑包查询字符串

    是否可以在 ASP NET MVC 中检测捆绑查询字符串 例如 如果我有以下捆绑请求 css bundles mybundle css v 4Z9jKRKGzlz D5dJi5VZtpy4QJep62o6A xNjSBmKwU1 是否可以提
  • 为现有表添加自增ID?

    我有一个预先存在的表 其中包含 fname lname email password 和 ip 但现在我想要一个自动增量列 但是 当我输入 ALTER TABLE users ADD id int NOT NULL AUTO INCREME
  • 不带参数解释的 Printf

    我知道如果 printf 没有给出任何参数 它会输出一个意外的值 Example include
  • 如何使用命令行安装较旧的 PhoneGap 版本?

    如何安装旧版本PhoneGap使用命令行 我熟悉以下安装命令 sudo npm install g phonegap 但是 这只会安装最新版本 npm install g phonegap
  • Java 一个方法中有两个可变参数

    Java 有没有办法创建一个需要两个不同的可变参数的方法 我知道 对于相同的对象类型 这是不可能的 因为编译器不知道从哪里开始或结束 但为什么两种不同的对象类型也不可能呢 例如 public void doSomething String
  • 我可以使用 grep 提取 CSV 文件的单列吗?

    我正在努力解决我必须尽快解决的问题 我有一个 csv 文件 字段用 分隔 我被要求使用 grep 创建一个 shell 命令 使用正则表达式仅列出第三列 我不能使用剪切 这是一种练习 我的文件是这样的 1 Evan Bell 39 Obig