Bash:完成中意外标记“<”附近的语法错误

Bash: Syntax error near unexpected token `<' in done

我正在使用以下脚本读取 CSV 文件第 3 列的值。但是,我收到语法错误。

tr -d '\r' < p_test.csv > fixed_p_test.csv
while IFS="," read -r rec1 rec2
do
  echo "Displaying Record-$rec1"
  echo "Price: $rec2"

done < <(cut -d "," -f1,3 fixed_p_test.csv | tail -n +2)

虽然 运行 上述脚本出现以下错误:

pScanFinal.sh: line 9: syntax error near unexpected token `<'

pScanFinal.sh: line 9: `done < <(cut -d "," -f1,3 fixed_p_test.csv | tail -n +2)'

我的 p_test.csv 看起来像:

A B C D E
192.158 True 12 HT Open
254.658 False 58 SM Closed

我该如何解决这个错误?

您实际上不需要 cuttail 或此处的进程替换,这意味着您可以使脚本 POSIX 符合您的要求 运行它。

{
    read  # Skip the first line
    while IFS=, read -r rec1 _ rec2 _; do
        ...
    done
} < fixed_p_test.csv

因为 jq 被标记了(但我不知道为什么),下面是如何使用 jq.

输入和输出应作为原始文本读取 (-R) 和写入 (-r)。然后用逗号(,)和select列[2](基于0)分割(/)每一行。

jq -Rr '(./",")[2]' file.csv
12
58

Demo


不是 asked/tagged,但恕我直言 awk 更合适:

awk -F, '{print }' file.csv