grep -A1 'blah' logfile
Run Code Online (Sandbox Code Playgroud)
感谢这个命令对于每个包含'blah'的行,我得到包含'blah'的行的输出以及日志文件中的下一行.它可能是一个简单的但我无法找到一种方法来省略具有'blah'的行并且仅在输出中显示下一行.
我有一个包含以下行的文件:
/logs/tc0001/tomcat/tomcat7.1/conf/catalina.properties:app.env.server.name = demo.example.com
/logs/tc0001/tomcat/tomcat7.2/conf/catalina.properties:app.env.server.name = quest.example.com
/logs/tc0001/tomcat/tomcat7.5/conf/catalina.properties:app.env.server.name = www.example.com
Run Code Online (Sandbox Code Playgroud)
在上面的输出中,我想提取3个字段(第2,4和最后一个*.example.com).我得到以下输出:
cat file | awk -F'/' '{print $3 "\t" $5}'
tc0001 tomcat7.1
tc0001 tomcat7.2
tc0001 tomcat7.5
Run Code Online (Sandbox Code Playgroud)
如何提取具有以下域名的最后一个字段'='?我如何使用multiple delimiter提取字段?
我有一个包含数千个数字的文件,每个数字都在它自己的行上:
34
42
11
6
2
99
...
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个脚本,它将打印文件中所有数字的总和.我有一个解决方案,但效率不高.(运行需要几分钟.)我正在寻找更有效的解决方案.有什么建议?
我最后在Python中为此编写了一个快速的小脚本,但我想知道是否有一个实用程序可以提供文本,其中每个行前面都有一些文本 - 在我的特定情况下,是一个时间戳.理想情况下,使用方式如下:
cat somefile.txt | prepend-timestamp
Run Code Online (Sandbox Code Playgroud)
(在你回答sed之前,我试过这个:
cat somefile.txt | sed "s/^/`date`/"
Run Code Online (Sandbox Code Playgroud)
但是,这只会在执行sed时评估date命令,因此每行都会错误地添加相同的时间戳.)
我想在awk中打印第二个最后一列或字段.字段数是可变的.我知道我应该可以使用,$NF但不知道如何使用它.
这似乎不起作用:
awk ' { print ( $NF-- ) } '
Run Code Online (Sandbox Code Playgroud) 我希望在每次迭代中并排打印变量sum/NR.我们如何避免awk在每次迭代中打印换行符?在我的代码中,默认情况下会在每次迭代中打印换行符
for file in cg_c ep_c is_c tau xhpl
printf "\n $file" >> to-plot.xls
for f in 2.54 1.60 800
awk '{sum+=$3}; END {print sum/NR}' ${file}_${f}_v1.xls >> to-plot-p.xls
done
done
Run Code Online (Sandbox Code Playgroud)
我希望输出看起来像这样
cg_c ans1 ans2 ans3
ep_c ans1 ans2 ans3
is_c ans1 ans2 ans3
tau ans1 ans2 ans3
xhpl ans1 ans2 ans3
Run Code Online (Sandbox Code Playgroud)
我目前的出局是这样的
**cg_c**
ans1
ans2
ans3
**ep_c**
ans1
ans2
ans3
**is_c**
ans1
ans2
ans3
**tau**
ans1
ans2
ans3
**xhpl**
ans1
ans2
ans3
Run Code Online (Sandbox Code Playgroud) 我有一些文件,如果它是文件中的最后一个字符,我想删除最后一个换行符. od -c告诉我,我运行的命令确实用一个尾随的新行写了一个文件:
0013600 n t > \n
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些与sed的技巧,但我能想到的最好的不是诀窍:
sed -e '$s/\(.*\)\n$/\1/' abc
Run Code Online (Sandbox Code Playgroud)
任何想法如何做到这一点?
假设您在工作日期间反复遇到bash中某些命令的以下形式的列化输出(在我的情况下,svn st在我的Rails工作目录中执行):
? changes.patch
M app/models/superman.rb
A app/models/superwoman.rb
Run Code Online (Sandbox Code Playgroud)
为了使用命令的输出 - 在这种情况下是文件名 - 需要某种解析,以便第二列可以用作下一个命令的输入.
我一直在做的是用来awk获取第二列,例如当我想删除所有文件(不是那个典型的用例:)时,我会这样做:
svn st | awk '{print $2}' | xargs rm
Run Code Online (Sandbox Code Playgroud)
由于我输入了很多,一个自然的问题是:在bash中有没有更短(更酷)的方法来实现这一点?
注意:我所要求的实际上是一个shell命令问题,即使我的具体示例是在我的svn工作流程上.如果您认为工作流程很愚蠢并建议另一种方法,我可能不会投票给您,但其他人可能会,因为这里的问题实际上是如何以最短的方式获得bash中的第n列命令输出.谢谢 :)
如何在字符串中包含管道符号时拆分|它.我想将它们拆分为数组.
我试过了
echo "12:23:11" | awk '{split($0,a,":"); print a[3] a[2] a[1]}'
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.如果我的字符串是那样的"12|23|11"话我怎么把它们分成一个数组呢?
我有一个文本文件,格式如下.第一行是"KEY",第二行是"VALUE".
KEY 4048:1736 string
3
KEY 0:1772 string
1
KEY 4192:1349 string
1
KEY 7329:2407 string
2
KEY 0:1774 string
1
Run Code Online (Sandbox Code Playgroud)
我需要与键相同的行中的值.所以输出应该是这样的......
KEY 4048:1736 string 3
KEY 0:1772 string 1
KEY 4192:1349 string 1
KEY 7329:2407 string 2
KEY 0:1774 string 1
Run Code Online (Sandbox Code Playgroud)
如果我可以像$或使用一些分隔符会更好,:
KEY 4048:1736 string , 3
Run Code Online (Sandbox Code Playgroud)
如何将两行合并为一行?