通读文件

通读文件

我有一个文件,其中包含按如下顺序排列的详细信息。

Name1
School Name1
State1
Name2
School Name2
State2
Name3
School Name3
State3

我希望它循环 3 次(示例文件包含 3 组,但我在这里想到了逻辑(原文如此),如果有 n 组,则循环应运行 n 组)次,并且在第一个循环中,应从第 1 行读取文件到第 3 行,然后在下一个循环中从第 4 行到第 6 行,然后从第 7 行到第 9 行,依此类推,如果同一集中有更多条目(名称、学校名称、州)。每次迭代时,它将把文件中的输入提供给另一个标准输出文件。我有一个工作脚本,它从文件中获取输入并将其提供给另一个文件,但发现如果集合重复则很难获得逻辑。

答案1

我会这样做一次读取文件 3 行:

while
    IFS= read -r name
    IFS= read -r school
    IFS= read -r state
do
    echo "$name:$school:$state"
done < input.file > output.file

利用这样一个事实,您可以将许多命令作为 while 循环的“条件”。

答案2

使用awk和复制完全相同的输出格伦·杰克曼在他的回答中做了:

$ awk -v OFS=':' '{ name=$0; getline sname; getline state;
                    print name,sname,state }' <input.file >output.file

-v OFS=':'将(“输出字段分隔符”)设置为OFS冒号。getline中的函数读取awk下一行(进入指定变量),并print打印由给定字段组成的记录,以 分隔OFS

答案3

使用 GNU sed

sed '1~3{N;N;s/\n/:/g}' < input.file > output.file

怎么运行的:

1~3        # match every 3rd line, starting with the 1st
{    
  N;N;     # append the next 2 lines of input into the pattern space
  s/\n/:/g # replace newlines with your chosen separator
}

答案4

使用xargs

xargs -d'\n' -n3 < file somecommand

将从中获取 3 个换行符分隔的值file并将它们作为参数传递给somecommand

前任。使用printf

$ xargs -d'\n' -n3 < file printf '"%s","%s","%s"\n'
"Name1","School Name1","State1"
"Name2","School Name2","State2"
"Name3","School Name3","State3"

相关内容