【发布时间】:2018-03-05 08:19:15
【问题描述】:
我有一个 1.txt 文件(字段分隔符为||o||):
aidagolf6@gmail.com||o||bb1e6b92d60454122037f302359d8a53||o||Aida||o||Aida||o||Muji?
aidagolf6@gmail.com||o||bcfddb5d06bd02b206ac7f9033f34677||o||Aida||o||Aida||o||Muji?
aidagolf6@gmail.com||o||bf6265003ae067b19b88fa4359d5c392||o||Aida||o||Aida||o||Garic Gara
aidagolf6@gmail.com||o||d3a6a8b1ed3640188e985f8a1efbfe22||o||Aida||o||Aida||o||Muji?
aidagolfa@hotmail.com||o||14f87ec1e760d16c0380c74ec7678b04||o||Aida||o||Aida||o||Rodriguez Puerto
2.txt(字段分隔符为:):
bf6265003ae067b19b88fa4359d5c392:hyworebu:@
14f87ec1e760d16c0380c74ec7678b04:sujycugu
我有一个 result.txt 文件(它将 1.txt 的第二列与 2.txt 的第一列匹配,如果结果匹配,它将用 2.txt 的第二列替换 1.txt 的第二列)
aidagolf6@gmail.com||o||hyworebu:@||o||Aida||o||Aida||o||Garic Gara
aidagolfa@hotmail.com||o||sujycugu||o||Aida||o||Aida||o||Rodriguez Puerto
还有一个 left.txt 文件(其中包含来自 1.txt 且在 2.txt 中没有匹配的不匹配行):
aidagolf6@gmail.com||o||d3a6a8b1ed3640188e985f8a1efbfe22||o||Aida||o||Aida||o||Muji?
aidagolf6@gmail.com||o||bb1e6b92d60454122037f302359d8a53||o||Aida||o||Aida||o||Muji?
aidagolf6@gmail.com||o||bcfddb5d06bd02b206ac7f9033f34677||o||Aida||o||Aida||o||Muji?
我正在尝试的脚本是:
awk -F '[|][|]o[|][|]' -v s1="||o||" '
NR==FNR {
a[$2] = $1;
b[$2]= $3s1$4s1$5;
next
}
($1 in a){
$1 = "";
sub(/:/, "")
print a[$1]s1$2s1b[$1] > "result.txt";
next
}' 1.txt 2.txt
问题是脚本在 2.txt 中使用 ||o|| 也是因为我得到了错误的结果。
编辑
修改后的脚本:
awk -v s1="||o||" '
NR==FNR {
a[$2] = $1;
b[$2]= $3s1$4s1$5;
next
}
($1 in a){
$1 = "";
sub(/:/, "")
print a[$1]s1$2s1b[$1] > "result.txt";
next
}' FS = "||o||" 1.txt FS = ":" 2.txt
现在,我收到以下错误:
awk:致命:无法打开文件“FS”进行读取(没有这样的文件或 目录)
【问题讨论】:
-
我建议学习Python
-
我已经知道python了。但我需要的解决方案是 bash。感谢您的帮助:)
-
你可以从 bash 调用 python,就像你从 bash 调用 awk。
-
是谁发明了这个规范的定界符?更重要的是为什么?
-
您可以为不同的文件设置不同的 FS,请参阅:stackoverflow.com/questions/24516141/… .. 可能这符合重复的条件?