【问题标题】:/usr/bin/cut: Argument list too long in bash script/usr/bin/cut:bash 脚本中的参数列表太长
【发布时间】:2015-07-07 13:01:46
【问题描述】:

我将一个 csv 文件加载到一个变量中,然后我试图删除一些导致此错误 /usr/bin/cut: Argument list too long 的列。这是我所做的:

if [ $# -ne 1 ]; then 
    echo "you need to add the file name as argument"
fi 

echo "input file name $1"
input_file=$(<$1)

#cut the required columns. 
cut_input_file=$(cut -f 1,2,3,5,8,9,10 -d \| $input_file)

echo $(head $cut_input_file)

我错过了什么?

【问题讨论】:

  • 阅读xargs。你不应该反斜杠 | 管道
  • @BasileStarynkevitch 他们在哪里使用过xargs
  • xargs 通常是参数列表太长的解决方案
  • @BasileStarynkevitch 啊好吧 :)
  • 只是要清楚所有这些xargs cmets:您的 sn-p 问题在下面的答案中进行了描述,xargs 不是解决它的正确方法。您的输入文件包含太多单词,并且将它们全部用作cut 的参数会达到控制台的限制。 xargs 通常用于绕过此限制,它从标准输入(不受限制)获取列表,并执行命令多次避免达到参数限制(数量,顺序等可以控制),但在您的情况下,您应该通过标准输入而不是通过参数提供数据

标签: linux bash


【解决方案1】:

该错误的原因是您使用了具有完整文件数据的$input_file

您需要在文件而不是文件内容上运行cut,因此请使用:

cut -f 1,2,3,5,8,9,10 -d '|' "$1"

要针对文件内容运行cut

cut -f 1,2,3,5,8,9,10 -d '|' <<< "$input_file"

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 2014-08-30
    • 2015-04-27
    • 2018-07-24
    • 1970-01-01
    • 2021-11-16
    • 2020-05-08
    • 2011-03-12
    • 2015-01-17
    相关资源
    最近更新 更多