尝试在 shell 脚本的循环中运行 awk 时出现“语法错误:循环变量错误”

4 shell bash awk

我有一个awk在终端上运行良好的命令:这个awk命令根据它们的列标题创建不同的文件。awk 命令:

for((i=2;i<5;i++)); do 
    awk -v i=$i 'BEGIN{OFS=FS="\t"}NR==1{n=$i}{print $1,$i > n".txt"}' ${Batch}.result.txt
done
Run Code Online (Sandbox Code Playgroud)

合并到 shell 脚本中的相同命令显示错误:

Syntax error: Bad for loop variable
Run Code Online (Sandbox Code Playgroud)

它的工作方式如下。我按照建议尝试使用 she-bang,但它重复了错误。

for i in 2 3 4; do awk -v i=$i 'BEGIN{OFS=FS="\t"}NR==1{n=$i}{print $1,$i  n".txt"}'
Run Code Online (Sandbox Code Playgroud)

Ini*_*ian 11

我认为该错误与您的Awk命令无关。我认为您正在 POSIX bourne shellsh中运行它,其中((不支持for-loop 构造。

运行脚本,将shebang 设置bash为安装路径。通常它是安全的#!/usr/bin/env bash,因为#!/usr/bin/env搜索PATHbash,而bash不是总在/bin,特别是在非Linux系统。对于 OpenBSD 系统,它在/usr/local/bin.


Kus*_*nda 7

脚本很可能是由/bin/sh而不是由bashksh93或任何其他理解类 Cfor循环的shell )解释的。

确保脚本有一个#!-line 说

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

在文件的最顶部(更改为要使用的 shell 和路径),或者使用正确的解释器显式运行脚本,例如:

bash ./scriptname
Run Code Online (Sandbox Code Playgroud)