小编Tom*_*den的帖子

用于“cat”文件中所有行的成对扩展的命令行工具

假设我有一个如下所示的文件(称为 sample.txt):

Row1,10
Row2,20
Row3,30
Row4,40
Run Code Online (Sandbox Code Playgroud)

我希望能够处理来自这个文件的流,它本质上是所有四行的成对组合(所以我们最终应该总共有 16 行)。例如,我正在寻找输出为的流(即高效)命令:

Row1,10 Row1,10
Row1,10 Row2,20
Row1,10 Row3,30
Row1,10 Row4,40
Row2,20 Row1,10
Row1,20 Row2,20
...
Row4,40 Row4,40
Run Code Online (Sandbox Code Playgroud)

我的用例是我想将此输出流式传输到另一个命令(如 awk)中,以计算有关此成对组合的一些指标。

我有一种方法可以在 awk 中做到这一点,但我担心的是我使用 END{} 块意味着我在输出之前基本上将整个文件存储在内存中。示例代码:

awk '{arr[$1]=$1} END{for (a in arr){ for (a2 in arr) { print arr[a] " " arr[a2]}}}' samples/rows.txt 
Row3,30 Row3,30
Row3,30 Row4,40
Row3,30 Row1,10
Row3,30 Row2,20
Row4,40 Row3,30
Row4,40 Row4,40
Row4,40 Row1,10
Row4,40 Row2,20
Row1,10 Row3,30
Row1,10 Row4,40
Row1,10 Row1,10
Row1,10 Row2,20
Row2,20 Row3,30
Row2,20 Row4,40
Row2,20 Row1,10
Row2,20 Row2,20 …
Run Code Online (Sandbox Code Playgroud)

shell awk shell-script text-processing

13
推荐指数
3
解决办法
2962
查看次数

加速递归FTP

我正在尝试使用 wget(或 ncftpget)从 NOAA FTP 服务器下载一年的数据。但是,由于 FTP 的开销(我认为),它花费的时间比它应该的要长。例如,这个命令

time wget -nv -m ftp://ftp:email@ftp.ncdc.noaa.gov/pub/data/noaa/2015 -O /weather/noaa/2015
Run Code Online (Sandbox Code Playgroud)

或者类似地,通过 ncftpget

ncftpget -R -T -v ftp.ncdc.noaa.gov /weather/noaa/ /pub/data/noaa/2015
Run Code Online (Sandbox Code Playgroud)

产生的结果。53分钟转30M!

FINISHED --2015-01-03 16:21:41--
Total wall clock time: 53m 32s
Downloaded: 12615 files, 30M in 7m 8s (72.6 KB/s)

real    53m32.447s
user    0m2.858s
sys 0m8.744s
Run Code Online (Sandbox Code Playgroud)

当我观看此传输时,每个单独的文件传输速度都非常快(500kb/秒),但下载 12,000 个相对较小的文件的过程会产生大量开销并减慢整个过程。

我的问题:

  1. 我是否正确评估了情况?我意识到在不了解服务器的情况下很难判断,但是在传输大量小文件时 FTP 真的很糟糕吗?
  2. 是否对 wget 或 ncftpget 进行了任何调整,以使它们能够更好地与远程 FTP 服务器配合使用?或者也许是某种并行性?

ftp

8
推荐指数
1
解决办法
2924
查看次数

标签 统计

awk ×1

ftp ×1

shell ×1

shell-script ×1

text-processing ×1