linux - 在 Linux shell 中读取文本并将某些特定行写入新文件
问题描述
我有一个包含这种格式信息的文件(input.txt):
045002 1987244NDBC North L. Mich. 453086401 176 5
045002 1999140NDBC North L. Mich. 453186421 176 5
045002 2006117NDBC North L. Mich. 453386421 176 5
045002 2007127NDBC North L. Mich. 453386431 176 5
045002 2009138NDBC North L. Mich. 453486411 176 5
045007 1987244NDBC South L. Mich. 427087101 176 5
045007 1991091NDBC South L. Mich. 428087101 176 5
045007 1991154NDBC South L. Mich. 427087101 176 5
045007 1995237NDBC South L. Mich. 427087001 176 5
045007 1999140NDBC South L. Mich. 426787021 176 5
045007 2006117NDBC South L. Mich. 426887031 176 5
045007 2009127NDBC South L. Mich. 426787031 176 5
045007 2010133NDBC South L. Mich. 427086971 176 5
045007 2011145NDBC South L. Mich. 426887031 176 5
045007 2012100NDBC South L. Mich. 426787031 176 5
045013 2012212UWM Atwater Park WI 431087851 176 2
045014 2012224UWM Green Bay WI 448087761 176 2
045018 2011222CPD MontroseBeach IL419787641 176 3 00011110
045020 2007230UGLOS GrandTrav Bay 447985601 176 2
我需要在 Linux shell 中读取此文件并创建一个输出文件,其中包含基于第一列中的数字的输入文件的某些特定行,例如 045002、045013、045018。输出文件 (output.txt) 应该看起来像这样:
045002 1987244NDBC North L. Mich. 453086401 176 5
045002 1999140NDBC North L. Mich. 453186421 176 5
045002 2006117NDBC North L. Mich. 453386421 176 5
045002 2007127NDBC North L. Mich. 453386431 176 5
045002 2009138NDBC North L. Mich. 453486411 176 5
045013 2012212UWM Atwater Park WI 431087851 176 2
045018 2011222CPD MontroseBeach IL419787641 176 3 00011110
解决方案
假设您有一个文件numbers
, 包含
045002
045013
045018
然后你可以做
awk 'NR == FNR { n[$1] = 1; next } $1 in n' numbers input.txt >output.txt
该awk
程序将numbers
文件和您的input.txt
文件作为输入。第一个块仅针对numbers
文件执行,并简单地创建一个以数字为键的关联数组。当我们到达第二个文件时,我们测试第一列中的数字以查看它是否是数组中的键。如果是,则打印整行。
这将产生output.txt
为
045002 1987244NDBC North L. Mich. 453086401 176 5
045002 1999140NDBC North L. Mich. 453186421 176 5
045002 2006117NDBC North L. Mich. 453386421 176 5
045002 2007127NDBC North L. Mich. 453386431 176 5
045002 2009138NDBC North L. Mich. 453486411 176 5
045013 2012212UWM Atwater Park WI 431087851 176 2
045018 2011222CPD MontroseBeach IL419787641 176 3 00011110
如果您希望awk
程序完全明确:
awk 'NR == FNR { n[$1] = 1; next } NR != FNR && ($1 in n) { print }' numbers input.txt >output.txt
推荐阅读
- arrays - 根据ruby中的引用数组对结构进行排序
- javascript - 如何在不使用 JavaScript 换行的情况下将某些内容记录到控制台?
- c - 如何在 MS Visual Studio 的调试模式下查看(或检查)C 中宏函数的值?
- c# - 在使用泛型的 ef 核心选择语句中选择命名字段
- tensorflow - TFHub 中的 ssd_mobilenet_v1 tflite 模型是如何训练的?
- java - AWS ec2 的奇怪编码问题 - java
- javascript - 输入字段不会清除
- android - 如何使用 kotlin 中使用的共享首选项以编程方式刷新活动?
- django - 建立 Django 模型的指南
- visual-studio-code - 是否可以将搜索过滤器/框添加到树视图组件?