linux - 文件格式 : Confusion using awk NR Variable

标签 linux bash shell awk

我是 awk 编程的新手,对 NR 变量的使用有点困惑..

我的代码是...

awk 'BEGIN {k=NR;}{printf("%s %s %s %s\n",$k,$(k+1),$(k+2),$(k+3))}' auth_data

$ cat auth_data

6262 6530 6661 3162 6364 6264 6561 3430 3033 3332 6536 3139 6230 6261 61
30 3637 0A00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 

输出:

6262 6530 6661 3162 6364 6264 6561 3430 3033 3332 6536 3139 6230 6261 6130
3637 0A00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000  6262 6530 6661

但我想要的是输出应该是这种格式:

  6262 6530 6661 3162 6364 6264 6561 3430
  3033 3332 6536 3139 6230 6261 6130 3637 
  0A00 0000 0000 0000 0000 0000 0000 0000
  0000 0000 0000 0000 0000 0000 0000 0000 

最佳答案

我猜你要找的是 NF,而不是 NR。

来自手册页:

NR The total number of input records seen so far.

NR 是实际的行号,但在这个问题中,你想在字段 idx 上做一些技巧,而不是行。

此外,我认为您的输入数据应该在文件“auth_data”中的一行中,对吧?

如果是这样,你可以试试

awk '{for(i=1;i<=NF;i++)if(i%8==0)print $i;else printf $i" "}' auth_data

检查下面的测试:

kent$  echo "6262 6530 6661 3162 6364 6264 6561 3430 3033 3332 6536 3139 6230 6261 6130 3637 0A00 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000"|\
awk '{for(i=1;i<=NF;i++)if(i%8==0)print $i;else printf $i" "}'
    6262 6530 6661 3162 6364 6264 6561 3430
    3033 3332 6536 3139 6230 6261 6130 3637
    0A00 0000 0000 0000 0000 0000 0000 0000
    0000 0000 0000 0000 0000 0000 0000 0000

回到问题,如果你只想做格式化,xargs 就足够了。见下文:

kent$  echo "6262 6530 6661 3162 6364 6264 6561 3430 3033\
        3332 6536 3139 6230 6261\
        6130 3637 0A00 0000 0000 \
        0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000"|xargs -n8

输出:

6262 6530 6661 3162 6364 6264 6561 3430
3033 3332 6536 3139 6230 6261 6130 3637
0A00 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000

您可以cat yourFile|xargs -n8xargs -n8 -a yourfile

关于linux - 文件格式 : Confusion using awk NR Variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941997/

相关文章:

bash - 如何判断 "find"命令的输出是否为空?

linux - 这些 Unix/Linux 行是做什么的?

shell - 我不小心使用 rm *$* 删除了存储库中的文件

linux - 执行 tcpstat 命令并同时对其输出执行操作

c - 使用选定的 main() 参数在 bash 中运行程序

linux - 要使用哪个 find -exec convert 命令将 n 个 pdf 文件连接成一个文件?9sa

linux - 如何使用十六进制编辑器在Linux中制作可执行的ELF文件?

Python subprocess.call bash 别名

git - 在非零退出后继续使用 "git submodule foreach"命令遍历子模块

bash - 通过 Plink 在 Windows 命令行上运行 shell 脚本(带参数)