linux - 如何测试 File2 中是否存在 File1 每一行的子字符串

标签 linux shell awk sed

我有两个包含以下数据的文件

文件1:

6100540301SD01        ON5330399520191104906781            2019110390678151053303995ACK          20191105
6100540301SD01        ON0403096420191104225695            2019110322569551004030964A            20191105
6005260301SD01        46460045792019110490678911059455    2019110490678951000755694BE3        1120191105
6005260301SD01        46460045792019110490679616020577    2019110490679651000764053BDJDEDH    1620191105

文件2:

20191104
20191105
20191106

由于file1是定宽文件,所以97到104字符位置的字符串是日期。我想按位置从 97 到 104 提取字符串,并检查它是否存在于 file2 中。如果它存在,我想将整行复制到 file3。如果不存在,我想将它复制到 file4

我已经创建了 C++ 程序,但是处理 file1 需要很长时间,而这将近 50 万条记录。因此,如果有任何 awk/sed 脚本可以提供帮助,请分享。

最佳答案

awk 助您一臂之力!

$ awk 'NR==FNR {dates[$0]; next} 
               {print > (substr($0,97,104) in dates?"file3":"file4")}' file2 file1

关于linux - 如何测试 File2 中是否存在 File1 每一行的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58756798/

相关文章:

linux - 我需要计算文件中第一个字段中的符号数量,并将它们与另一个字段相加

php - grep 整个服务器用于 shell 黑客/恶意软件

linux - 如何编写 bash 脚本将多个文件合并为一个文件

linux - 1 用于获取服务器 IP 地址 (ifconfig) 并将主机名附加到/etc/hosts 以匹配 ipaddress 的内联脚本

linux - 将多个 header 信息字段附加到文件,直到找到下一个 header

sed - libSVM 自动化标签脚本

linux - 重新附加丢失进程的 X 服务器 View

php - 是的,又是一个 SQLSTATE[HY000] [14]

java - 将 Double 从 Delphi/Pascal 转换为 Java

c - C shell 中的输出重定向