如何在第n个定界符上分割字符串?

use*_*491 2 bash shell scripting

对于文件中的每一行,我想在第四个破折号之前打印该行上的所有内容。

输入:

TCGA-HC-8216-10A-11D-A323-01
TCGA-J4-8200-10A-11D-A323-01
TCGA-EJ-A65E-10A-11D-A323-01
Run Code Online (Sandbox Code Playgroud)

我想在第四个破折号“-”上分割每一行

输出:

TCGA-HC-8216-10A
TCGA-J4-8200-10A
TCGA-EJ-A65E-10A
Run Code Online (Sandbox Code Playgroud)

我知道我可以像这样在每个破折号上分开:

#!/usr/bin/env bash

IN="TCGA-HC-8216-01A-11D-A323-01
TCGA-J4-8200-10A-11D-A323-01
TCGA-EJ-A65E-10A-11D-A323-01"

arr=$(echo $IN | tr "-" "\n")

for x in $arr
do
 echo "> [$x]"
done
Run Code Online (Sandbox Code Playgroud)

但这会在每个破折号之间分割并打印字符串的每个部分。

Sor*_*gal 5

使用 cut

cut -d- -f1-4 <<'EOF'
TCGA-HC-8216-01A-11D-A323-01
TCGA-J4-8200-10A-11D-A323-01
TCGA-EJ-A65E-10A-11D-A323-01
EOF
Run Code Online (Sandbox Code Playgroud)

您正在削减输入-d(一)到(四)的(定界符)-并返回-f(字段)1-4