如何使用 awk 或 sed 将行转换为列

如何使用 awk 或 sed 将行转换为列

我需要转置一个文件。

输入文件:

1/1/1111
1
2
3
4

2/2/2222
5
6
7
8

输出:

1/1/1111 1 2 3 4
2/2/2222 5 6 7 8

答案1

xargs 怎么样

 xargs -n5 < input_file

或 awk

awk '{a=(NR%6==0)?"":a$0" ";if(NR%6==5)print a}' inp

答案2

perl

perl -lp00e 's/\n/ /g' your_file

解释

  • l:从正在处理的当前记录中删除输入记录分隔符,并在每个打印行后添加当前输出记录分隔符(默认为换行符)。
  • -p:对文件逐条记录进行操作,处理后打印当前记录。
  • -00:表示记录分隔符为两个或多个连续的换行符
  • -e:执行以下字符串作为代码,同时将默认变量 ( $_) 设置为当前从文件中读取的记录。
  • s/\n/ /g:用空格替换当前记录中遇到的每个换行符(g修饰符确保替换是“全局”的)。

答案3

sed

$ sed -e '
  :1
  $!N
  /\n$/{
    P
    d
  }
  s/\n/ /
  t1
' <file

答案4

它们的格式是否相同,即每个块 6 行?如果是这样,paste最简单(即 6 个破折号):

paste - - - - - - < file

如果您需要空格而不是制表符,请添加-d' '

相关内容