2

我希望将我的 Unix 文件输出(在新行上输出每个值)转换为分组行,如下所示。

假设我在 Unix 中的输出文件如下所示:

jobname
userid
starttime
endtime
jobname2
userid
starttime
endtime

我希望输出为:

jobname1 userid starttime endtime
jobname2 userid starttime endtime
4

5 回答 5

9

这是一个最小的awk解决方案:

awk 'ORS=NR%4?" ":"\n"' input.txt 

输出

jobname userid starttime endtime
jobname2 userid starttime endtime

(如果你想对齐字段,管道到column -t

于 2012-08-14T00:14:34.387 回答
6

这会将每四行连续粘贴为四个制表符分隔的字段:

cat source_file | paste - - - - > destination_file
于 2015-09-14T08:18:51.253 回答
1

使用 GNU sed:

tr '\n' ' ' < file | sed -r 's/(\w+ +){4}/&\n/g'
于 2012-08-13T22:29:20.367 回答
1

如果您正在寻找一个 shell 脚本,您可以这样做,因为要在输出中打印的行数似乎必须是固定长度:

while read line1; do
  read line2
  read line3
  read line4
  echo $line1 $line2 $line3 $line4 >>output
done <file
于 2012-08-13T20:56:59.537 回答
0

有点难看,但不需要 shell 脚本:

cat outputfile | tr "\n" " " | sed -e 's/\W*\(\w*\) \(\w*\) \(\w*\) \(\w*\)\W*/\1 \2 \3 \4\n/g'
于 2012-08-13T21:07:22.753 回答