Sorting 在AIX中对文件进行排序和连接
我有两个示例文件test1.txt和text2.txt。如何恰当地加入他们Sorting 在AIX中对文件进行排序和连接,sorting,join,aix,Sorting,Join,Aix,我有两个示例文件test1.txt和text2.txt。如何恰当地加入他们 $> cat test1.txt 1 USA 2 CANADA 3 MEXICO 4 BAHAMAS 5 CUBA $> cat test2.txt MEXICO Mexico-city USA Washington CANADA Ottawa CUBA Havanna BAHAMAS Nassau $> join -j 2 -o '1.1,1.2,2.2' < (sort -k2 test
$> cat test1.txt
1 USA
2 CANADA
3 MEXICO
4 BAHAMAS
5 CUBA
$> cat test2.txt
MEXICO Mexico-city
USA Washington
CANADA Ottawa
CUBA Havanna
BAHAMAS Nassau
$> join -j 2 -o '1.1,1.2,2.2' < (sort -k2 test1.txt) < (sort -k1 test2.txt)
ksh: 0403-057 Syntax error: `(' is not expected.
第一个解决方案不好!当test1.txt文件很大时,为每一行调用
grep
和cut
会有太多开销
while read -r line; do
key=${line#* }
printf "%s %s\n" "${line}" $(grep "${key}" test2.txt | cut -d" " -f2-)
done < test1.txt
<(
和我都尝试了$>join-j2-o'1.1,1.2,2.2'这是什么版本的KSH?您是否安装了一个更新的版本(ksh93
?),或者bash?是的,Mat是有问题的。KSH
在AIX上是88
的原始风格。您必须找到ksh93
,并使用适当的“shebang”行(可能位于脚本顶部的#!/bin/ksh93
可以访问
while read -r line; do
key=${line#* }
printf "%s %s\n" "${line}" $(grep "${key}" test2.txt | cut -d" " -f2-)
done < test1.txt
awk 'FNR==NR { towns[$1]=$2; next;} $2 in towns {print $0 " " towns[$2];}' test2.txt test1.txt