如何安全地提取header信息并用awk制作文件名?
how to safely extract header information and make the name of the file with awk?
我有一个文本文件如下:
group
time label1
1 1
2 2
3 3
group
time label2
5 8
6 9
7 10
我想要 1) 拆分文件以便只有数字 2) 删除组、时间和标签 header 信息以及 3) 用相应的 [=31= 标记每个文件].
这是我希望输出的样子:
label1.txt
1 1
2 2
3 3
label2.txt
5 8
6 9
7 10
我一直在用 awk 做这件事,但是,我 运行 遇到有时文件被错误的文件名覆盖的问题:
awk '!/group /' text.dat > nogroup.txt #removing 'group'
split -dl 5 --additional-suffix=.txt nogroup.txt split.txt
mv graph.dat00.txt label1.txt
mv graph.dat01.txt label2.txt
awk 'NR!=1' label1.txt > label1.txt
awk 'NR!=1' label2.txt > label2.txt
如何确保文件名(label1)等于文件中的标签?
谢谢!
$ awk '~/^[0-9]+$/{print > out; next} {close(out); out=".txt"}' file
$ head label?.txt
==> label1.txt <==
1 1
2 2
3 3
==> label2.txt <==
5 8
6 9
7 10
关于代码中的 awk 'NR!=1' label1.txt > label1.txt
- 永远不要尝试写入您正在阅读的同一个文件,因为 shell 可以在命令开始 运行 之前清空输出文件,所以您最终可能会切换输入文件。而是做 awk 'NR!=1' label1.txt > tmp && mv tmp label1.txt
或类似的。
我有一个文本文件如下:
group
time label1
1 1
2 2
3 3
group
time label2
5 8
6 9
7 10
我想要 1) 拆分文件以便只有数字 2) 删除组、时间和标签 header 信息以及 3) 用相应的 [=31= 标记每个文件].
这是我希望输出的样子:
label1.txt
1 1
2 2
3 3
label2.txt
5 8
6 9
7 10
我一直在用 awk 做这件事,但是,我 运行 遇到有时文件被错误的文件名覆盖的问题:
awk '!/group /' text.dat > nogroup.txt #removing 'group'
split -dl 5 --additional-suffix=.txt nogroup.txt split.txt
mv graph.dat00.txt label1.txt
mv graph.dat01.txt label2.txt
awk 'NR!=1' label1.txt > label1.txt
awk 'NR!=1' label2.txt > label2.txt
如何确保文件名(label1)等于文件中的标签?
谢谢!
$ awk '~/^[0-9]+$/{print > out; next} {close(out); out=".txt"}' file
$ head label?.txt
==> label1.txt <==
1 1
2 2
3 3
==> label2.txt <==
5 8
6 9
7 10
关于代码中的 awk 'NR!=1' label1.txt > label1.txt
- 永远不要尝试写入您正在阅读的同一个文件,因为 shell 可以在命令开始 运行 之前清空输出文件,所以您最终可能会切换输入文件。而是做 awk 'NR!=1' label1.txt > tmp && mv tmp label1.txt
或类似的。