像这样的文件:ExampleFile.txt
line1TextHere
line2TextHere
line3TextHere
我想从文件中逐行读取并将其输出到不同的文件,因此文本的每一行都会有一个文件。看起来像这样:
# cat file1.txt
line1TextHere
# cat file2.txt
line2TextHere
# cat file3.txt
line3TextHere
到目前为止我知道,如果我想从示例文件中读取第 2 行,我可以这样做
# awk 'NR==2 {print $0}' ExampleFile.txt
我想我应该用循环读取文件三次,然后将其输出到三个不同的文件,但我不知道该怎么做。我用的是 Debian。谢谢。
将把每一行打印
n
到文件中。filen.txt
ExampleFile.txt
顺便说一句,请注意,这
$0
是默认打印的内容print
,也是{print}
默认操作,因此您awk 'NR==2 {print $0}'
可以只写awk NR==2
。但是使用
tail -n +2 | head -n 1
更专业的工具会使其更有效率。您不会希望对输入的每一行都运行一个实例
head
和一个实例;在这种情况下运行一个实例会变得更加高效,但同样,使用像Ed 的 GNU方法这样的更专业的工具可能会更有效率。tail
awk
split
我可能会使用
awk
Stéphane Chazelas 的回答,但您也可以使用split
(这里假设您的 Debian 系统上发现了GNU 实现split
--additional-suffix
,以及其对标准--numeric-suffixes
的扩展):但请注意,您需要在输出文件名中指定足够的空间,以便容纳与输入文件中的行数相同的数字(因此上述内容
-a 4
将允许最多9999
输出文件/输入文件行),否则您将收到split: output file suffixes exhausted
错误。