我有多个文件具有相同的结构但不是相同的数据。假设他们的名字是值_ #####。txt(values_00001.txt,values_00002.txt等)。
我想从每个文件中提取特定行并将其复制到另一个文件中。例如,我想从values_00001.txt中提取第8行,从values_00002.txt中提取第16行,从values_00003.txt中提取第24行,依此类推(每次增量= 8),并在新的中逐行复制它们。文件(比如values.dat)。
我是shell脚本的新手,我尝试使用sed,但我不知道如何做到这一点。
提前感谢您的回答!
答案 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.txt
,values_2.txt
,依此类推。>> values.dat
重定向到values.dat
文件。我创建了3个相等的文件a1
,a2
,a3
。它们包含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