【发布时间】:2013-08-30 11:43:39
【问题描述】:
注意:我使用的是 OS X
我有一个数据文件,它只是一长串数字,每个条目单独一行:
23
28
26
14
...
我需要重新排列第 37 行记录/字段中的数据:
23 28 26 14 1 2 3 4 5 6 7 8 9 2 4 5 6 9 4 8 7 6 3 2 5 9 4 1 2 5 7 8 9 4 6 1 2
5 8 6 4 3 5 23 28 26 14 1 2 3 4 5 6 7 8 9 2 4 5 6 9 4 8 7 6 3 2 5 9 4 1 2 5 7
...
这是我尝试过的代码:
awk '{
for(i=1;i<=NF;i+=1) {
if(i%37 != 0) printf $i" ";
else printf "$i\n"
}
}'
input.txt > output.txt
第一个printf $i" " 似乎正在工作,但条件似乎有问题,因为无论我在else 语句中告诉它打印什么,它都不会打印它。也许只是语法疏忽??
有趣的是,当我刚刚运行时:
awk '{for(i=1;i<=NF;i+=1) printf $i" "}' input.txt > output.txt
生成的文件将 一些 数据放入 37 条记录长度的行中,但有些仍然更长...这可能是数据中某些伪影的结果吗? (数据已通过许多排序/组织功能运行。)
【问题讨论】:
-
问题的症结在于您使用了“记录/字段”一词。它们不一样,您对差异感到困惑。文件由记录组成。每条记录由字段组成。默认记录分隔符是换行符。默认字段分隔符是一系列连续的空白。因此,您的输入文件包含 37 条记录,每条记录包含 1 个字段。您的脚本正在将
NF(当前记录中的字段数)与 37 进行比较。看到问题了吗?