我有一个名为foo的文件夹.Foo有一些其他文件夹,可能有子文件夹和文本文件.我想找到以名称年份开头的每个文件并读取其第N行并将其打印到新文件.例如,foo有一个名为year1的文件,子文件夹中有文件名为year2,year3等.程序会将year1的第一行打印到一个名为writeout的文件中,然后将第二行打印到文件写入等.
我也不太懂得如何为文件执行for循环.
到目前为止,我有:
#!/bin/bash
for year* in ~/foo
do
Here I tried writing some code using the sed command but I can't think of something else.
done
Run Code Online (Sandbox Code Playgroud)
我还在终端收到一条消息,说"年*"不是有效的标识符.有任何想法吗?
she*_*ter 35
Sed可以帮到你.
回想一下,sed通常会处理文件中的所有行并打印文件中的每一行.
您可以关闭该功能,并通过匹配模式或行号仅选择感兴趣的打印行.
因此,要打印文件2的第2行,您可以说
sed -n '2p' file2 > newFile2
Run Code Online (Sandbox Code Playgroud)
要打印第二行然后停止处理,请添加q(用于退出)命令(还需要大括号将两个命令组合在一起),即
sed -n '2{p;q;}' file2 > newFile2
Run Code Online (Sandbox Code Playgroud)
(如果您正在处理大文件,这可以节省很多时间).
为了使其更通用,您可以将数字更改为包含数字的变量,即
lineNo=3
sed -n "${lineNo}{p;q;}" file3 > newFile3
Run Code Online (Sandbox Code Playgroud)
如果你想让你所有的切片行进入1个文件,那么使用shell的'append-redirection',即
for lineNo in 1 2 3 4 5 ; do
sed -n "${lineNo}{p;q;}" file${lineNo} >> aggregateFile
done
Run Code Online (Sandbox Code Playgroud)
使用find ...驱动文件列表的结果的其他帖子是一种很好的方法.
我希望这有帮助.