【发布时间】:2021-07-05 11:14:37
【问题描述】:
test 文件为例:
cat <<'EOF'> test
/boot/efi/EFI/debian/grubx64.efi root root 700 1625230722
/boot/efi/EFI/debian/mmx64.efi root root 700 1625230722
/boot/efi/EFI/debian/shimx64.efi root root 700 1625230722
/boot/grub/fonts/unicode.pf2 root root 644 1625230723
EOF
我打算在test文件中再增加一列,新增列的值取决于第一列(md5sum --binary($1)),如md5sum --binary /boot/efi/EFI/debian/grubx64.efi。
我的脚本是awk '{ cmd = "md5sum --binary" close(cmd) $(NF+1) = (cmd($1)); print }' test > test_new,但出现如下错误:
awk: line 1: syntax error at or near =
我是awk的新手,有什么问题?
【问题讨论】:
-
awk 中的语句必须用分号或换行符分隔。 'close` 语句之前没有语句分隔符,之后也没有。
-
@user1934428:这不是唯一的问题。
-
@anubhava :这是语法错误的问题。如果您在
close(cmd)之后放置一个分号,this 语法错误就会消失。这并不意味着脚本在之后可以工作,但是对于这方面,您已经发布了一个很好的答案。我只是想回答OP的字面问题,因为她也想知道这个错误信息的原因。 -
@rowboat,$1 引用的文件的校验和。
-
md5sum是一个命令。 awk 是一个操作文本的工具,而不是一个排序命令调用的工具。 shell 是一种对命令调用进行排序的工具。当您尝试为此使用 awk 时,您实际上是在进行一系列调用shell { awk { shell { md5sum } } }在每个输入行生成一个新的子 shell 来调用 md5sum,而如果您只是从 shell 调用 md5sum 那么它只是shell { md5sum },即 1 个 shell 调用每个输入行一次 md5sum,这样会更快更简单。