在开始之前仅作澄清:需要运行脚本的服务器是AIX框。 Shell是KSH,所以我没有Bash提供的高级功能。
好的,这就是我需要完成的:
我有两个文件。他们两个都有两个逗号分隔的列。
文件“ A”有约170K行,看起来像这样:
0000A7AED4F0C9FB1ADC14134700CadsevDDD4A000CEDCF.ext,\\server000005\F$\DICE\0035\ 0000C3793C4CD6095947E44618D4Eadsev397460011D036.ext,\\server000005\F$\DICE\0020\ 0001168DDDA4DF294E37753FE891BadsevB33900011EEA3.ext,\\server000005\F$\DICE\0088\ 00014E6A3AFF0911D95A933778895adsev6C81E00088E97.ext,\\server000005\F$\DICE\0009\ 0001A65FA90EC0E6640E1589C4B66adsev6FE1F00088EB9.ext,\\server000005\F$\DICE\0009\ 0001C5AA0A9AC8E4EDFC69C483160adsev881CC001157ED.ext,\\server000005\F$\DICE\0034\ 0003270ED2D2AB11739029711A233adsev55605000CFC63.ext,\\server000005\F$\DICE\0028\ 000327C08A0ECD8F23EE6AE42B3C3adsevE35F00011481D.ext,\\server000005\F$\DICE\0061\ 0003423C2592EF9D0AD9A7E2B595Cadsev6ABD9000D3501.ext,\\server000005\F$\DICE\0022\ 00035862746EFB2098EC965F31328adsev66800000DA8CF.ext,\\server000005\F$\DICE\0021\
文件“ B”有约200万行,看起来像这样:
0000294A3F3997slredA9D7ADBEE0C0CDE67C100001245C.nlo,\\server000002\F$\RESTORE_DICE\DICE\0083\ 00003FFF21F5DAslred8F20FCF0A5CEE9920A4A00016835.nlo,\\server000002\F$\RESTORE_DICE\DICE\0029\ 00005B1FFB996Fslred065F708695ADDD987AF9002139AD.nlo,\\server000002\F$\RESTORE_DICE\DICE\0157\ 00005CF3C87456slred41FDB077914EB04FFA2B001F9D74.nlo,\\server000002\F$\RESTORE_DICE\DICE\0103\ 00006BD33D737FslredD717F08A20F44F2B878500011050.nlo,\\server000002\F$\RESTORE_DICE\DICE\0094\ 00008254F4D661slred6C05CFC91D9BCB82EDD800077FFA.nlo,\\server000002\F$\RESTORE_DICE\DICE\0082\ 000092391392E3slredB744E98697FA39CEEDCD0004FB66.nlo,\\server000002\F$\RESTORE_DICE\DICE\0032\ 0000945EDBB916slredAB08CD7AA8B825E1F55C0000FDC0.nlo,\\server000002\F$\RESTORE_DICE\DICE\0093\ 0000C3793C4CD6slredE44618D4E0A2C50397460011D036.nlo,\\server000002\F$\RESTORE_DICE\DICE\0146\ 0000D0DA56260DslredF30BCC9CDFF2A4556A7500039400.nlo,\\server000002\F$\RESTORE_DICE\DICE\0054\
在这种情况下,第1列是文件名,而第2列是文件名。
我需要什么:
对于文件A中的每一行,获取文件名,在文件B中查找,然后编写换行符,以将其回显/打印到包含以下三个字段的新文件“ C”中: 第1列:文件的路径,如文件B中所示。 第2列:文件路径,如文件A所示。 第3列:文件名。
我试图将其简短化,因为我被“指控”以前的问题中的单词腹泻,但是如果我错过了这里的重要细节,请随时告诉我。
就这样,您知道,我对此具有有效的批处理和ksh代码,这些代码可以与较小(较少的行)文件配合使用,在这种情况下,它们都不起作用。 (CMD批处理每小时仅处理几千行,而ksh则基于内存限制甚至拒绝读取此类文件。)
谢谢你们一直在那里!
马丁。
答案 0 :(得分:1)
如果您无权访问ksh93(我认为AIX使用ksh88,而不是ksh93?),bash,zsh或其他能够理解<(command)
重定向的shell,则就像3行和几个临时文件。 ..
$ sort -t, -k1 filea > sorted_filea
$ sort -t, -k1 fileb > sorted_fileb
$ join -t, -j1 -o '2.2 1.2 0' sorted_filea sorted_fileb > filec
(较少一个或两个文件已按文件名排序)。
如果您这样做具有以下外壳之一:
$ join -t, -j1 -o '2.2 1.2 0' <(sort -t, -k1 filea) <(sort -t, -k1 fileb) > filec