awk:在生成数据时保留行顺序并删除重复的字符串(镜像)
我有两个文本文件 g1.txtawk:在生成数据时保留行顺序并删除重复的字符串(镜像),awk,comparison,batch-processing,Awk,Comparison,Batch Processing,我有两个文本文件 g1.txt alfa beta;www.google.com Light Dweller - CR, Technical Metal;http://alfa.org;http://beta.org;http://gamma.org; g2.txt Jack to ride.zip;http://alfa.org; JKr.rui.rar;http://gamma.org; Nofj ogk.png;http://gamma.org; 我使用这个命令来运行我的awk脚本
alfa beta;www.google.com
Light Dweller - CR, Technical Metal;http://alfa.org;http://beta.org;http://gamma.org;
g2.txt
Jack to ride.zip;http://alfa.org;
JKr.rui.rar;http://gamma.org;
Nofj ogk.png;http://gamma.org;
我使用这个命令来运行我的awk脚本
awk -f ./join2.sh g1.txt g2.txt > "g3.txt"
我得到这个输出
Light Dweller - CR, Technical Metal;http://alfa.org;http://beta.org;http://gamma.org;;Jack to ride.zip;http://alfa.org;JKr.rui.rar;http://gamma.org;Nofj ogk.png;http://gamma.org;
alfa beta;www.google.com;
有什么问题吗?1。行顺序不保守,例如在输出文件g3.txt中,
alfa beta行;www.google.com代码>位于行灯…
之后。当它应该是第一个时,正如您在g1.txt中看到的那样
2.我在Light..
行中有许多镜像字符串,您可以在g3.txt中看到
http://alfa.org
http://gamma.org
http://gamma.org
在同一行中重复
我希望行的输出是什么?如下所示:
首先:我尝试实现一个函数,检查一行中是否有丑陋的字符串,例如,您是否在我的行输出Light Resider-CR,Technical Metal…
中看到该行中有相同的字符串?例如http://alfa.org
和http://gamma.org
?好吧,我不要这个我想要每个字符串,用分隔符括起来;仅存在一次,并且每行仅存在一次。
此规则应仅适用于输出文件g3.txt
Second:我希望g3.txt输出文件中必须保持g1.txt中的原始行顺序。例如,在g1.txt中,我有
alfa beta ...
Light Dweller ...
但是我的脚本返回给我一个不同的顺序
Light Dweller ...
alfa beta ...
我想阻止行的重新排序
我的join2.sh脚本如下
#! /usr/bin/awk -f
BEGIN {
OFS=FS=";"
C=0;
}
{
if (ARGIND == 1) {
X = $NF
T0[$NF] = C++
$NF = ""
if (T1[X]) {
T1[X] = T1[X] $0
} else {
T1[X] = $0
}
} else {
X = $NF
T0[$NF] = C++
$NF = ""
if (T2[X]) {
T2[X] = T2[X] $0
} else {
T2[X] = $0
}
}
}
END {
for (X in T0) {
# concatenate T1[X] and X, since T1[X] ends with ";"
print T1[X] X, T2[X]
}
}
解决方案:
您应该先这样处理g2.txt
:
cat join2.awk
开始{
OFS=FS=“;”
}
ARGIND==1{
map[$2]=(map中的$2?OFS的map[$2]:)$1
下一个
}
{
r=0美元;
对于(i=1;iWhy is label Powershell?抱歉,我弄错了,现在我删除了我尝试做的两件事:实现一个函数,检查一行中是否有丑陋的字符串,例如,您是否在我的行输出中看到Light Resider-CR,Technical Metal…
该行中有相同的字符串?例如http://alfa.org
和http://gamma.org
?好的,我不想要这个。我想要字符串,由分隔符分隔;
只能出现在行中一次。秒:我想要防止行的重新排序。我想要g3.txt输出文件中必须保持g1.txt中行的原始顺序。例如,在g1.txt中,我有alfa beta…Light Dweller…
但是我的脚本返回给我一个不同的排序光居住者…alfa beta…
我想防止重新排序行扫描你原来在g1.txt中也有重复的URL?太好了!真的谢谢!现在我明白了:)对不起,打扰您了,但是我注意到如果我有这个文本,您的脚本就不起作用了,但是,在我看来,它的格式是相同的。您能帮我理解为什么吗?文本是可以的,可能是因为我需要跳到同一行,也需要带有后缀&st=30;
或&st=60;
或&st=90;
等等的文本。。待会儿见我把问题贴在这里,如果想看的话。
#! /usr/bin/awk -f
BEGIN {
OFS=FS=";"
C=0;
}
{
if (ARGIND == 1) {
X = $NF
T0[$NF] = C++
$NF = ""
if (T1[X]) {
T1[X] = T1[X] $0
} else {
T1[X] = $0
}
} else {
X = $NF
T0[$NF] = C++
$NF = ""
if (T2[X]) {
T2[X] = T2[X] $0
} else {
T2[X] = $0
}
}
}
END {
for (X in T0) {
# concatenate T1[X] and X, since T1[X] ends with ";"
print T1[X] X, T2[X]
}
}
alfa beta;www.google.com
Light Dweller - CR, Technical Metal;http://alfa.org;http://beta.org;http://gamma.org;;Jack to ride.zip;JKr.rui.rar;Nofj ogk.png