Shell 尝试使用 cut 和 echo 命令后出现错误

Shell getting error after trying to use cut and echo command

美好的一天。

试图制作一个逐行读取文件并获取由“;”分隔的所述行的第 6 个字段的脚本我收到以下消息:

/directory/file.txt: line 1: syntax error near unexpected token `;;'
/directory/file.txt: line 1: `name;123456789;middlename;01/01/2017;9876543210;555555555555;product;;;'

files.txt行如下

name;123456789;middlename;01/01/2017;9876543210;555555555555;product;;;

最后一个“;”在那里是因为文本文件是从 excel 文件复制而来的,该文件后来被转换为 dos2unix 的 unix 格式。当我在脚本中使用 cut 命令时,我得到了我想要的东西,但如果我在下面的循环中使用它,我会收到错误消息:

#!/bin/bash

file = "/directory/file.txt"

for line in file;
do
    cut -d";" -f6 line
done

为什么会发生这种情况,我该如何解决?

实际上关于您的代码的所有内容都是错误的。

  1. 赋值语句不在 =
  2. 两边使用空格
  3. for 不打开文件并遍历其内容
  4. 使用$运算符展开参数;否则,它们只是文字字符串。

一个简单的工作示例:

file="/directory/file.txt"
while IFS= read -r line; do
    printf '%s' "$line" | cut -d";" -f6
done < "$file"

一旦你正确地使用了while循环,你就可以使用read命令为你做field-splitting;不需要 cut:

while IFS=";" read -r f1 f2 f3 f4 f5 f6 frest; do
    echo "$f6"
done < "$file"

使用数组会稍微缩短它,但会使您的代码 non-POSIX 兼容。

while IFS=";" read -ra f; do
    echo "${f[5]}"
done < "$file"