我尝试了以下代码:
set exp {elem[0]}
set temp {elem[0]}
regsub $temp $exp "1" exp
if {$exp} {
puts "######### 111111111111111 ################"
} else {
puts "########### 0000000000000000 ############"
}
Run Code Online (Sandbox Code Playgroud)
当然,这是最简单的regsub可能(单词完全匹配),但它仍然无法正常工作,也没有替换.如果我写elem而不是elem [0],一切正常.我尝试使用{elem [0]},elem [0],"elem [0]"等,但没有一个有效.有人知道吗?
如何仅选择以任何数字开头的行或带有几颗星的" **SETTLE"字?以下将返回以数字开头的行,但不返回带有SETTLE一词的行.
# cat somefile.txt | egrep "(^[0-9]|'^*************** SETTLE ')"
Run Code Online (Sandbox Code Playgroud) 在bash中,我们可以获取脚本的路径$0.$_根据官方文件,似乎我们可以在鱼脚本中做到这一点.
但是,如果我尝试编写这样的鱼脚本并运行它,它将只打印一个换行符.
#!/usr/bin/fish
echo $_
Run Code Online (Sandbox Code Playgroud)
在反应性鱼类中,echo $_会给予echo文字,并且<command> $_会将"命令"明确地作为<command>论点.
我$_对它的奇怪行为以及它的用途感到困惑.
我有这个命令,我想从输出中总结所有数字.
该命令看起来像这样
$(hadoop fs -ls -R /reports/dt=2018-08-27 | grep _stats.json | awk '{print $NF}' | xargs hadoop fs -cat | jq '.duration')
Run Code Online (Sandbox Code Playgroud)
所以它会列出所有的文件夹/reports/dt=2018-08-27,并只获得_stats.json和传递,通过jq从hadoop -cat和只得到.duration从JSON.最后我得到了这样的结果.
1211789 1211789 373585 495379 1211789
Run Code Online (Sandbox Code Playgroud)
但我希望命令将所有这些数字加在一起成为 4504331
由于输入数据中的"*",切割操作会给出意想不到的结果,如何解决它...
以下将更好地解释:
$ line="000067 (base 16) SOFT * RITE, INC."
$ vendoroui=`echo $line | cut -d' ' -f1`
$ echo $vendoroui
000067
$ vname=`echo $line | cut -d' ' -f4-$NF`
$ echo $vname
1 bb bn btest.txt btmp.txt cc cut if sedTbKkAE sorted start.txt t10.sh t11.sh t12.sh t13.sh t14.sh t1.sh t2.txt t3.sh t4.sh t5.sh t6.sh t7.sh t8.sh t9.sh tmp RITE, INC.
Run Code Online (Sandbox Code Playgroud)
这是由于inPut中的'*',如何解决?
我有两个过程:
第一个过程,我运行:./ Vlc视频>> resu.txt它给我一个输出文件resu.txt
第二个进程是一个脚本,它对文件resu.txt进行计算.这个脚本的名称是calcule.sh,我运行它:/ Calcul.sh
我想同时运行两个进程.即具有两个并行的过程.
我如何并行运行两个进程(./ Vlc视频>> resu.txt和./ Calcul.s).有没有这样做的命令?拜托,你能给我一个能做到这一点的代码
提前感谢您的回答.
我对这个脚本的一致性有点问题.您可以运行一次,没有任何问题.但是,如果您立即将其重新加载并再次运行,则它不会正确获取变量,因为输出未以正确的方式写入文件.
例如:此实用程序旨在实质上更新4个文件..temp,.tiers,.version和.sync在通过对话框提示的各个阶段,它会更新文件.我的问题是,有时它没有更新文件,我找不到任何原因,因为它只是在你已经运行一次之后.我在启动时擦除文件,所以我不确定这笔交易是什么.它就像它只是从记忆中抓取它?
无论如何,为了测试这个,你需要/ test中的以下文件
感谢任何能给我一些指导的人.
cat .tiers
Stable=1
Release=2
Beta=3
Run Code Online (Sandbox Code Playgroud)
码:
#!/usr/bin/env bash
touch .version
touch .temp
VERSION=`cat .version`
DIR=/test/
STORED=`cat ${DIR}/.temp`
################################
# REARRANGE TIERS #
################################
rearrange()
{
start
end
}
################################
# SYNC FILE EXISTS #
################################
sync_exists()
{
dialog --msgbox ".sync exists in the directory $(echo ${VERSION}).\n\n Use Tier Move instead." 10 40
clean_up
exit 1;
}
################################
# CLEAN UP #
################################
clean_up()
{
rm -rf .version
rm -rf .update
rm -rf .temp
}
################################ …Run Code Online (Sandbox Code Playgroud) 我尝试使用cut命令从"ls -l"命令输出中获取文件名及其大小的列表.
$ ls -l | cut -f 5,9 -d " "
Run Code Online (Sandbox Code Playgroud)
它给出了基于'SINGLE WHITE SPACE'作为分隔符的输出.当"ls -l"输出在某些行中包含连续的空格时,该命令的输出不适合这些行.只有一个空格作为列分隔符的行给出正确的输出.
当我运行以下命令时:
$ ls -l | awk '{ print $5"\t"$9 }'
Run Code Online (Sandbox Code Playgroud)
awk忽略多个空格并从"ls -l"输出中正确提取列.虽然,cut将每个空格视为分隔符,但是将值放在错误的列中.
它为所有行提供正确的输出.
为什么会这样?使用cut命令可以做些什么来解决这个问题?
我会用一个例子来问我的问题。我有2个文件:
文件#1
002948998 752986QAK NTR974VTS 0000000
102948932 752986QSC NTR974VTS 0000000
102948933 752986QSC NTR974VTS 0000000
Run Code Online (Sandbox Code Playgroud)
文件#2
002901998 752986KFK NTR974MTS 0990000
002948998 752986QAQ NTR974VTS 0000000
002901998 752986KFK NTR974MTJ 0990000
Run Code Online (Sandbox Code Playgroud)
期望的输出:
002948998 752986QAK NTR974VTS 0000000
102948932 752986QSC NTR974VTS 0000000
102948933 752986QSC NTR974VTS 0000000
002901998 752986KFK NTR974MTS 0990000
Run Code Online (Sandbox Code Playgroud)
注意:行之间没有间隙(输入)。
我想使用文件 1 和文件 2 的第一列进行比较,如果它们在文件 1 中匹配,则从文件 2 中删除整行。我还想将结果保存到第一个文件或新文件 file # 3,其中包含文件 1 和文件 2 中的所有条目(没有文件 2 中的重复项)。请在 shell 脚本中提供一个好的解决方案。
目前我正在使用:
awk 'FNR==NR {a[$1];print;next} !($1 in a)' file1 file2 > file3
Run Code Online (Sandbox Code Playgroud)
但它并不是仅基于第一列进行比较。相反,它正在比较整行。
请帮忙。