【问题标题】:compare first word for each line in csv file and print the line which match and on failure also print lines not matching first word比较 csv 文件中每一行的第一个单词并打印匹配的行,失败时还打印与第一个单词不匹配的行
【发布时间】:2019-10-31 07:00:29
【问题描述】:

我有一个 csv 文件,示例如下。它只有 4 行,但实际上行数不固定。它可以是 7 或 10 或 100 或更多。我想将文件分成另外两个 csv 文件。一个 csv 应该包含第一个单词匹配的所有行,另一个文件应该包含第一个单词不匹配的所有行。我想要这个问题的 shell 脚本。 示例 csv 文件如下所示:

DBA1,IDA1,RefA11,RefA12,RefA13,RefA14,RefA15
DBA1,IDA1,RefA21,RefA22,RefA23,RefA24,RefA25,RefA26
DBB1,IDB1,RefBB11,RefBB12,RefBB13,RefBB14,RefBB15,RefBB16,RefBB17,RefBB18
DBB2,IDB2,RefB1,RefB2,RefB3,RefB4,RefB5,RefB6,RefB7,RefB8

我无法让脚本正常工作。

我期待这里解释的两个输出文件。 一个 csv 应该如下所示,因为这两行中的第一个单词匹配

DBA1,IDA1,RefA11,RefA12,RefA13,RefA14,RefA15
DBA1,IDA1,RefA21,RefA22,RefA23,RefA24,RefA25,RefA26

另一个csv应该是

DBB1,IDB1,RefBB11,RefBB12,RefBB13,RefBB14,RefBB15,RefBB16,RefBB17,RefBB18
DBB2,IDB2,RefB1,RefB2,RefB3,RefB4,RefB5,RefB6,RefB7,RefB8

【问题讨论】:

  • 第一个单词匹配的所有行您是在寻找程序来决定还是将其作为参数提供?
  • 嗨詹姆斯。感谢您的询问。是的,我需要一个 shell 程序来决定和创建两个单独的 csv,如我的问题陈述中所述。如果需要更多信息来帮助我,请告诉我
  • 什么决定了“匹配”与否?应该测试行的值来自哪里?
  • 嗨,肖恩..感谢您的询问。行是 csv 的一部分,它将是用户输入,行数可以是 1 到 200 之间的任何值。逗号作为分隔符的每一行的第一个单词应用于匹配下一行的第一个单词。我希望我回答了你的查询.如果还需要更多详细信息,请告诉我

标签: shell


【解决方案1】:

我不太清楚,但从我读到的:

一个 csv 应该包含第一个单词匹配的所有行

$ WORD=DBA1
$ grep "^$WORD," file.csv
DBA1,IDA1,RefA11,RefA12,RefA13,RefA14,RefA15
DBA1,IDA1,RefA21,RefA22,RefA23,RefA24,RefA25,RefA26

另一个文件应该包含第一个单词不匹配的所有行

$ grep -v "^$WORD," file.csv
DBB1,IDB1,RefBB11,RefBB12,RefBB13,RefBB14,RefBB15,RefBB16,RefBB17,RefBB18
DBB2,IDB2,RefB1,RefB2,RefB3,RefB4,RefB5,RefB6,RefB7,RefB8

Grep 的-v 选项反转逻辑以打印所有不匹配的行。如果您想向用户询问 WORD,请使用 read WORD

【讨论】:

  • 感谢 Jens,但它需要更强大以解决我的问题。这个词不是一个固定的字符串。它应该在运行时被捕获,所以我们必须先得到这个词,然后再进一步使用
  • @NitinKumar 我已将答案调整为分配给 WORD 并使用 $WORD。
  • 谢谢@Jens 它帮助我的方法正式化。
  • @NitinKumar 太好了。下一步是投票(点击向上箭头),并可能通过点击复选标记接受对您最有帮助的答案。
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2013-10-09
  • 1970-01-01
  • 2017-07-30
相关资源
最近更新 更多