【问题标题】:Sending a file's data to multiple other files in Shell将文件的数据发送到 Shell 中的多个其他文件
【发布时间】:2017-01-03 12:09:06
【问题描述】:

我正在尝试根据以下数据库的日期将数据从一个文件发送到多个其他文件:

100:Clinton Mcdaniel:16/04/2016
101:Patience Mccarty:18/03/2013
102:Carol Holman:24/10/2013
103:Roth Lamb:11/02/2015
104:Chase Gardner:14/06/2014
105:Jacob Tucker:05/11/2013
106:Maite Barr:24/04/2014
107:Acton Galloway:18/01/2013
108:Helen Orr:10/05/2014
109:Avye Rose:07/06/2014
110:Xerxes Richmond:13/11/2015
111:Illana Campos:22/07/2016
112:Ruby Baker:21/01/2015
113:Mark Lynn:21/06/2014
114:George Tyson:03/10/2014
115:Heather Sweeney:26/11/2015
116:Zahir Hines:08/10/2014
117:Cleo Decker:12/06/2014
118:Cyrus Best:07/01/2015
119:Dominique Goodwin:19/12/2015
171:Laura Mercado:06/06/2013
165:Kai Nash:16/07/2015
184:Oren Flores:27/09/2013
123:Rogan Rowe:05/12/2014
146:Vivian Stevens:20/01/2014
130:Anne Lawson:23/04/2015
196:Willow Powers:11/11/2015
167:Megan Caldwell:04/05/2016
195:Megan Long:03/10/2015
126:Castor Rhodes:19/06/2015
190:Anne Sullivan:12/01/2013
159:Lars Keith:28/10/2015

我想要做的是根据年份将每一行发送到特定文件,如果这些行在日期为 2013 年,我想将其添加到名为 Year2013.txt 的文件中,如果日期列有2014 比我希望它转到文件 Year2014.txt 等。

我一直在尝试将 if 语句与 AWK 一起使用,但它没有按我的预期工作。它通常只保存年份或日期,而不是数据库的整行。

我试过类似的代码

$awk -F":" '{if($3.7==2013)print $0 > "Year2013.txt"}}' IDNameDate

但它们通常不起作用

【问题讨论】:

  • 为什么不for i in {2010..2020}; do grep "$i" filename >> "Year$i.txt"; done ? (根据需要调整年份范围)
  • @David grep "/${i}$"
  • $3.7 符号在 awk 中不起作用
  • @WalterA 是的,您可以稍微收紧模式,但只需使用提供的示例数据,在我的测试中效果很好。如果它作为答案发布,我会进一步锚定它。

标签: shell date if-statement awk


【解决方案1】:

给你...

$ awk -F/ '{print > "Year"$NF".txt"}' file

$ head -3 Year*.txt
==> Year2013.txt <==
101:Patience Mccarty:18/03/2013
102:Carol Holman:24/10/2013
105:Jacob Tucker:05/11/2013

==> Year2014.txt <==
104:Chase Gardner:14/06/2014
106:Maite Barr:24/04/2014
108:Helen Orr:10/05/2014

==> Year2015.txt <==
103:Roth Lamb:11/02/2015
110:Xerxes Richmond:13/11/2015
112:Ruby Baker:21/01/2015

==> Year2016.txt <==
100:Clinton Mcdaniel:16/04/2016
111:Illana Campos:22/07/2016
167:Megan Caldwell:04/05/2016

【讨论】:

  • 我收到以下错误:$ awk -F"/" '{print > "Ano$NF".txt"}' IDNomeData.txt awk: cmd.line:1: {print > "Year$NF".txt"} awk:cmd。 line:1: ^ 语法错误 awk: cmd. line:1: {print > "Year$NF".txt"} awk: cmd. line:1: ^ 未终止的字符串
  • 糟糕,忘了,我已经修好了。谢谢大佬,你帮了大忙。我实际上找到了一种方法来做到这一点,但它有大量的 IF 和其他。你的方法更好更简单。
  • 好吧,我还有一个问题。如您所见,所有行将在每个相应的 Year*.files 上分开,但它们没有排序。我知道我可以使用以下代码对日期进行排序,但在 AWk 命令槽管道不起作用后使用它很明显:$ sort -n -t":" -k3.7 -k3.4,3.5 -k3.1 ,3.2 IDNomeData.txt | awk -F/'{print > "Year"$NF".txt"}'
  • sort -t: -k3.7 -k3.4 -k3 file | awk ... 应该可以工作。
猜你喜欢
  • 2020-09-05
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 2012-08-09
  • 2011-09-17
  • 2021-08-15
相关资源
最近更新 更多