Shell脚本从多个文件复制行

时间:2013-12-18 16:58:23

标签: bash shell sed

我有多个文件具有相同的结构但不是相同的数据。假设他们的名字是值_ #####。txt(values_00001.txt,values_00002.txt等)。

我想从每个文件中提取特定行并将其复制到另一个文件中。例如,我想从values_00001.txt中提取第8行,从values_00002.txt中提取第16行,从values_00003.txt中提取第24行,依此类推(每次增量= 8),并在新的中逐行复制它们。文件(比如values.dat)。

我是shell脚本的新手,我尝试使用sed,但我不知道如何做到这一点。

提前感谢您的回答!

2 个答案:

答案 0 :(得分:1)

我认为文件的排序对于确保按所需顺序输出也很重要。

考虑这个脚本:

n=8
while read f; do
   sed $n'q;d' "$f" >> output.txt
   ((n+=8))
done < <(printf "%s\n" values_*.txt|sort -t_ -nk2,2)

答案 1 :(得分:0)

这可以做到:

for var in {1..NUMBER}
do
    awk -v line=$var 'NR==8*line' values_${var}.txt >> values.dat
done

解释

  • for循环是基本的。
  • -v line=$var“将”$var值赋予awk,因此可以与变量line一起使用。
  • 'NR==8*line'打印行号8*{value we are checking}
  • values_${var}.txt获取文件values_1.txtvalues_2.txt,依此类推。
  • >> values.dat重定向到values.dat文件。

测试

我创建了3个相等的文件a1a2a3。它们包含30行,每行代表行号:

$ cat a1
1
2
3
4
...

执行一个班轮:

$ for var in {1..3}; do awk -v line=$var 'NR==8*line' a${var} >> values.dat; done
$ cat values.dat 
8
16
24