我有 2 个文本文件
1.txt
AA;00000;
BB;11111;
GG;22222;
2.txt
KK;WW;55555;11111;
KK;FF;ZZ;11111;
KK;RR;YY;11111;
我尝试生成此3.txt
输出:
AA;00000;
BB;11111;KK;WW;55555;KK;FF;ZZ;KK;RR;YY;
GG;22222;
在删除重复字段后,我应该拥有这个
AA;00000;
BB;11111;KK;WW;55555;FF;ZZ;RR;YY;
GG;22222;
简而言之:在由;
(FS=";") 分隔的两个文件中,如果$n
文件 1 中的字段存在于$m
文件 2 中的任何位置,其中 m,n 不是 1,则追加$0(file2,m)
到$0(file1,n)
. 必须避免重复字段。
我将尝试草拟一个解决方案
awk -f script.awk 2.txt 1.txt
其中脚本如下:
BEGIN {
FS=";"
OFS=";"
}
NR==FNR {
allRecordsFile2[i++] = $0;
next;
}
{
for(r in allRecordsFile2)
{
split(allRecordsFile2[r],";",array)
for(f in array)
{
for($2 through $n of file1 currently processed)
{
if $n == f --> $0 = $0";"allRecordsFile2[r]
}
}
}
## cleanup duplicates
print $0
}
我仍然需要敲定清理重复项,但这可能可以通过拆分$0
并";"
使用计数数组来跟踪重复项来完成。
但运行此脚本后,我返回语法错误
C:\Program Files (x86)\GnuWin32\bin>awk -f script.awk file2.txt file1.txt
awk: script.awk:17: for($2 through $n of filei currently processed)
awk: script.awk:17: “ syntax error
awk: script.awk:19: if $n == f --> $0 = $0";"allRecordsFile2[r]
awk: script.awk:19: “ syntax error
awk: script.awk:19: if $n == f --> $0 = $0";"allRecordsFile2[r]
awk: script.awk:19: “ syntax error
errcount:3
与其尝试基于
FNR
/的顺序读取和控制NR
,为什么不使用getline
读取2.txt
和拆分';'
然后构建输出字符串(o
如下)连接每行的唯一组件?你可以做类似的事情:示例使用/输出
1.txt
使用and中的示例数据2.txt
(您1.txt
再次错误命名),您将收到:这看起来像你想要的。
作为以两个文件名作为参数的脚本
Windows 应遵循相同的约定,使用
ARGV
.awk
请注意,在脚本中运行时,您不包括规则周围的单引号,例如(注意:您需要将
/usr/bin/awk
口译员更改为您拥有的任何内容)用法是,例如
./test.awk 1.txt 2.txt
让我知道这是否有帮助。
使用关联数组的键可以方便地处理重复项。这需要 GNU awk 用于多维数组
然后
生产
我需要更多证据证明它对 URL“不起作用”: