使用 cut 命令和 bash 变量中的标准

问题描述 投票:0回答:1

我想使用

cut
命令提取 csv 文件的某些列。 然而,我不想将我的标准硬编码,而是想从 bash 变量中获取它们。

如果没有变量,我的命令将如下所示:

cut -d';' -f 1-8,20,22 "$input_file" > ANFR_reduced.csv

但是,当我将条件

-f 1-8,20,22
存储在 bash 变量中时,我的
cut
命令无法正确执行(错误字段从 1 开始编号)

criteria_col="-f 1-8,20,22"
cut -d';' "$criteria_col" "$input_file" > ANFR_reduced.csv

请问有什么办法可以解释为什么这不起作用吗?

bash cut
1个回答
0
投票

如果启用调试模式 (

set -xv
),您将看到
bash
所看到的内容:

$ touch some_file
$ criteria_col="-f 1-8,20,22"

$ set -xv

$ cut -d';' "$criteria_col"  some_file
+ cut '-d;' '-f 1-8,20,22' some_file
            ^^^^^^^^^^^^^^
cut: fields are numbered from 1
Try 'cut --help' for more information.

请注意,

-f 1-8,20,22
被视为单个字符串
'-f 1-8,20,22'
,这反过来会导致错误。

一个简单的修复方法是将

-f
从变量移动到命令行,例如:

$ criteria_col="1-8,20,22"

$ cut -d';' -f "$criteria_col"  some_file
            ^^
+ cut '-d;' -f 1-8,20,22 some_file
$                                    # no error; no output since my file is empty

如果您需要

-f
成为标准的一部分,则建议使用 F.Hauri 的评论/建议(使用数组)。

© www.soinside.com 2019 - 2024. All rights reserved.