根据另一个文件中的行号从文件中拾取行

has*_*san 5 python bash awk

我有两个文件 - 一个包含地址(行号),另一个包含数据,如下所示:

地址文件:

2
4
6
7
1
3
5
Run Code Online (Sandbox Code Playgroud)

数据文件

1.000451451
2.000589214
3.117892278
4.479511994
5.484514874
6.784499874
7.021239396
Run Code Online (Sandbox Code Playgroud)

我想根据地址文件的数量随机化数据文件,所以我得到:

2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874
Run Code Online (Sandbox Code Playgroud)

我想在python或bash中做到这一点,但还没有找到任何解决方案.

hee*_*ayl 2

awk

awk 'NR==FNR {a[NR]=$0; next} {print a[$0]}' data.txt addr.txt
Run Code Online (Sandbox Code Playgroud)
  • NR==FNR {a[NR]=$0; next}创建一个关联数组,a其中键是记录(行)号,值是整个记录,这仅适用于第一个文件 ( NR==FNR),即data.txt. next使awk转至下一行而不进一步处理记录

  • {print a[$0]}打印数组中的值,键为当前文件的 ( addr.txt) 行(记录)号

例子:

% cat addr.txt 
2
4
6
7
1
3
5

% cat data.txt 
1.000451451
2.000589214
3.117892278
4.479511994
5.484514874
6.784499874
7.021239396

% awk 'NR==FNR {a[NR]=$0; next} {print a[$0]}' data.txt addr.txt
2.000589214
4.479511994
6.784499874
7.021239396
1.000451451
3.117892278
5.484514874
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案和很好的解释。 (2认同)