我使用awk来计算csv文件中一列的总和.数据格式如下:
id, name, value
1, foo, 17
2, bar, 76
3, "I am the, question", 99
Run Code Online (Sandbox Code Playgroud)
我使用这个awk脚本来计算总和:
awk -F, '{sum+=$3} END {print sum}'
Run Code Online (Sandbox Code Playgroud)
name字段中的某些值包含逗号,这会破坏我的awk脚本.我的问题是:能解决这个问题吗?如果是的话,我该怎么做?
谢谢.
可以传递给命令行多长时间sh -c ''?(在bash和bourne shell中)
该限制远低于操作系统的限制(在现代Linux的情况下).
例如:
$ /bin/true $(seq 1 100000)
$ /bin/sh -c "/bin/true $(seq 1 100000)"
bash: /bin/sh: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我怎么能绕过这个问题呢?
更新
我想注意到getconf这里无法帮助(因为这不是系统限制):
$ seq 1 100000 | wc -c
588895
$ getconf ARG_MAX
2097152
Run Code Online (Sandbox Code Playgroud)
更新#2
现在我明白了这里有什么意义.这不是shell限制,即系统限制,但是对于每个参数的长度,而不是整个arglist.
$ /bin/true $(seq 1 100000)
$ /bin/true "$(seq 1 100000)"
bash: /bin/true: Argument list too long
Run Code Online (Sandbox Code Playgroud)
谢谢CodeGnome的解释.
我有以下bash脚本,对于找到的每个图像重复.它需要迭代所有html,css和js文件,并替换该文件中所有出现的图像.
for image in app/www/images-theme-dark/*.png
do
echo "installing icon" $image
# extract filename from iconpath
iconfile=$(basename $image)
iconPath="images/"$(basename $image)
# replace paths in all files containing icon paths
find app/www -type f \( -name "*.html" -or -name "*.css" -or -name "*.js" \
-or -name "*.appcache" \) \
-exec sed -i '' -e 's|$iconPath|images-theme-dark/$iconfile|g' "{}" \;
done
Run Code Online (Sandbox Code Playgroud)
但是当我运行脚本时sed给出:
sed: can't read : No such file or directory
在StackOverflow上我发现sed:无法读取:没有这样的文件或目录但是我已经有了引号{} …
我试图在 python 中使用 f 字符串将一些变量替换为我正在打印的字符串,但出现语法错误。这是我的代码:
print(f"{index+1}. {value[-1].replace("[Gmail]/", '')}")
Run Code Online (Sandbox Code Playgroud)
我在添加替换后才开始遇到问题。我已经检查过很多次了,我确信我没有漏掉括号。我知道还有很多其他方法可以实现此目的,其中一些可能更好,但我很好奇为什么这行不通。
我正在尝试编写一个notify-finish可以添加到任何命令之前的脚本.完成后,它将运行以下参数给出的命令,然后在命令完成时通过电子邮件发送给用户.这就是我所拥有的:
PROG=$1
# Run command given by arguments
$@
ECODE=$?
echo -e "Subject: `hostname`: $PROG finished\r\nTo: <$USER>\r\n\r\nExited with $ECODE\r\n" | sendmail $USER
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都有效,但是当参数包含空格时,引用会被删除.
工作范例:
notify-finished rsync -avz source/ user@remote:dest/
Run Code Online (Sandbox Code Playgroud)
失败的例子:
notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,$@扩展到rsync -avz -e ssh -c blowfish source user@remote:dest/,缺少单引号.它也不适用于双引号,也不适用于$*.
在阅读其他帖子之后,我尝试将命令放在一个数组中,但是我得到了完全相同的问题:
CMD=(notify-finished rsync -avz -e 'ssh -c blowfish' source/ user@remote:dest/)
${CMD[@]}
Run Code Online (Sandbox Code Playgroud)
我如何使这项工作适用于所有论点?
我试图理解为什么Bash在使用${parameter:+word}(使用备用值)进行变量扩展时,在here-document中删除双引号(但不是单引号),例如:
% var=1
% cat <<EOF
> ${var:+"Hi there"}
> ${var:+'Bye'}
> EOF
Hi there
'Bye'
Run Code Online (Sandbox Code Playgroud)
根据手册,后面的"单词" :+用波浪扩展,参数扩展,命令替换和算术扩展处理.这些都不应该做任何事情.
我错过了什么?如何在扩展中获得双引号?
我有一个Invoices表是从与Job或相关联的库存创建的Order.我可以将一张Quotes桌子作为库存和发票之间的中间位置,但感觉我会有重复的数据结构和逻辑来处理"这是一个引用吗?" 位.
从商业角度来看,报价是从不同的发票:报价之前承诺发送和发送发票,一旦完成,付款到期,但如何在我的资料库和模型来表示这一点.
编辑:对于此特定实例,指示Job=== Order.
我正在构建一小组脚本来远程启动,停止和检查进程的状态.在stop这些脚本应该寻找一个过程,并杀死它.因此,我做:
ssh deploy@hera 'kill -9 `ps -ef | grep MapReduceNode | grep -v "grep" | awk -F " " '{print $2}' | head -n 1`'
Run Code Online (Sandbox Code Playgroud)
这里的问题是awk标记化步骤需要单引号,并且这些单引号与用于通过ssh执行远程命令的单引号冲突.这些单引号如何被转义?
我正在寻找能够使用bash /标准Linux命令转换字符串的内容,如下所示:
例如:
谢谢!
我想在php中使用常量,但我也想把它放在双引号内,就像变量一样.这是可能吗?
define("TESTER", "World!");
echo "Hello, TESTER";
Run Code Online (Sandbox Code Playgroud)
显然输出"Hello,TESTER",但我真正想要的是:
$tester = "World!";
echo "Hello, $tester";
Run Code Online (Sandbox Code Playgroud)
输出"你好,世界!".