Questions tagged «text-processing»

通过程序,脚本等操作或检查文本


6
AWK-将多个.dat文件的第二行输出到一个文件
我有多个文件,例如:(实际上我有80个) file1.dat 2 5 6 9 7 1 file2.dat 3 7 8 4 1 3 我想最后得到一个包含所有第二行的文件。即 output.dat 6 9 8 4 到目前为止,我所拥有的内容虽然循环了文件名,但是之前覆盖了文件。例如上述文件的输出将只是 8 4 我的shell脚本看起来像这样: post.sh TEND = 80 TINDX = 0 while [ $TINDX - lt $TEND]; do awk '{ print NR==2 "input-$TINDX.dat > output.dat TINDX = $((TINDX+1)) done

3
如何将带有时间戳的命令历史连续输出到终端?
我使用一个简单的别名来启用一个或多个终端窗口中的命令“跟踪”: alias trackmi='export PROMPT_COMMAND="history -a; $PROMPT_COMMAND"' 然后,我将tail -f我的.bash_history文件放在工作区的另一个终端中,以立即获得反馈。我刚刚启用了无限的历史记录, 并export HISTTIMEFORMAT="[%F %T] "在.bashrc中更新了我的历史记录格式()。当然,该history命令会显示时间戳。但是历史文件本身的格式为: #1401234303 alias #1401234486 cat ../.bashrc 我该如何转换Unix时间并像显示命令一样将整个命令显示在一行上history,包括编号: 578 [2014-05-27 19:45:03] alias 579 [2014-05-27 19:48:06] cat ../.bashrc ...然后遵循。还是找到一种将history命令输出连续输出到终端的方法?

4
sed为什么给我一个关于未终止的s的错误?
我在bash脚本中有一组sed替换项,并且遇到有关未终止的s命令的错误。sed行如下所示: sed -n -e "s/TMPFOO1/$FOO1/" -e "s/TMPFOO2/$FOO2/" -e "s/TMPFOO3/$FOO3/" -e "s/TMPFOO4/$FOO4/" -e "s/TMPFOO5/$FOO5/" /home/foo/template > /home/foo/template/finishedresult 但是由于某种原因,bash不喜欢这样,我得到了一个关于 sed: -e expression #4, char 69: unterminated `s' command 我在这里想念什么?我如何让SED输入变量?在我看来,他们都被解雇了。


2
grep比赛中的字符
我正在寻找一个巨大的数据库转储中的查找和替换对象,并且它没有做我认为应该发生的事情。我想在文件中grep输入目标字符串,然后查看周围的8个字符左右(我可能需要调整该数字,具体取决于)。我怎样才能做到这一点? 我之所以不能打交道,是因为有数百场比赛,甚至数千场比赛。我想获得一些围绕字符串的字符,然后将其通过管道uniq传递到或某种东西中,以查看为什么我的查找和替换有意外行为。 另外,同一行上可以有多个匹配项!

5
在行尾删除一个或多个用“-”分隔的字段
我将解析数据googleapis.txt bucket,abc-def-ghi-45gjd4-wwxis bucket,dde-wwq-ooi-66ciow-po22q instance,jkl-mno-1-zzz-68dkakw-oo9w8 disk,pqr-stu-10-kuy-l2oxapw-rp4lt 我期望下面的结果 bucket,abc-def-ghi bucket,dde-wwq-ooi instance,jkl-mno-1-zzz disk,pqr-stu-10-kuy 我以为我必须更改-为空格然后运行此命令 cat googleapis.txt | awk '{$NF="";sub(/[ \t]+$/,"")}1' | awk '{$NF="";sub(/[ \t]+$/,"")}1' 我从https://stackoverflow.com/a/27794421/8162936中获得了 解析后的信息,我将把该空间更改为hypen -。 有谁知道最佳实践或一线shell命令来解析它?谢谢大家

5
删除每一列中包含NA的行
我有一个制表符分隔的文件,如下所示: gene v1 v2 v3 v4 g1 NA NA NA NA g2 NA NA 2 3 g3 NA NA NA NA g4 1 2 3 2 每行中的字段数是固定的,并且相同。我想从上述文件中删除那些行,其中从第2列到最后一列的每一行的所有字段均为NA。然后输出应如下所示: gene v1 v2 v3 v4 g2 NA NA 2 3 g4 1 2 3 2

7
在冒号之前获取内容
我在Linux上有一个文本文件,其内容如下: help.helloworld.com:latest.world.com dev.helloworld.com:latest.world.com 我想在冒号之前获取内容,如下所示: help.helloworld.com dev.helloworld.com 我该如何在终端机中做到这一点?

4
查看文件开始和结束的Bash方法
在基于队列的集群上,从命令(例如)显示待处理作业的队列showqueue。 该命令以列的形式返回诸如名称等合理数据的列表,但是列/数据对于该问题并不重要。 我喜欢使用的工具watch一样watch showqueue,有时(有一个别名alias watch="watch ",以力别名扩展我的命令来观看)。前几行有有价值的数据(正在运行的作业),然后是挂起的作业等,最后还有一些有价值的摘要。 但是,有时showqueue的输出不在屏幕上(我知道这真是难以置信)!理想情况下,我希望可以通过某种方式同时查看文件的开头和结尾。 到目前为止showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2,我最好的是:,并使用watch其别名。 有谁知道更灵活或更实用的东西?我的解决方案使用bash循环有点麻烦,可以使“ ...”中断多行显示,根本无法适应调整终端窗口的大小,而且我敢肯定,我还错过了更多东西。 有什么建议么?

2
不使用“ e”来操纵科学格式
我正在尝试处理一个包含以科学计数法表示的数字但没有e符号(即1.2e+3写为)的文件1.2+3。 我想到的最简单的方法awk是使用函数替换+为e+,gsub并在新文件中进行计算。减号情况也是如此。因此,可以使用以下命令完成简单的修复 awk '{gsub("+", "e+", $1); print $1, $2, $3, $4, $5}' file_in 并在所有列中执行相同操作。 但是,该文件还包含负数,这使事情变得更加复杂。可以看到一个示例文件 1.056000+0 5.000000-1 2.454400-3 2.914800-2 8.141500-6 2.043430+1 5.000000-1 2.750500-3 2.698100-2-2.034300-4 3.829842+1 5.000000-1 1.969923-2 2.211364-2 9.499900-6 4.168521+1 5.000000-1 1.601262-2 3.030919-2-3.372000-6 6.661784+1 5.000000-1 5.250575-2 3.443669-2 2.585500-5 7.278104+1 5.000000-1 2.137055-2 2.601701-2 8.999800-5 9.077287+1 5.000000-1 1.320498-2 2.961020-2-1.011600-5 9.248130+1 5.000000-1 3.069610-3 …

3
删除文本文件的一部分并使用sed跟随以下行
我需要编辑如下文件: auto wlx00 allow-hotplug wlx00 iface wlx000 inet dhcp iface wlx000 inet6 auto post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2 auto wlx000 目标是删除以'iface ... inet6'开头的行,并删除以空格开头的下几行(可以是一个或多个): iface wlx000 inet6 auto post-up sysctl -w net.ipv6.conf.wlx000.accept_ra=2 并保持其余状态不变,以得到以下结果: auto wlx00 allow-hotplug wlx00 iface wlx000 inet dhcp auto wlx000 我尝试使用sed,如下所示: sed -i.old -r -e "/iface\s*\w*\s*inet6.*/,\${d;/^\s.*/d;}" /etc/configfile 但它会删除从正确位置开始到擦除为止的所有内容。我只想删除选择iface文本后以空格开头的线条。

4
按空格定界,但忽略反斜杠空格
5678 [] testing,\ group [] [testing [] ip\ 5.6.7.8 [] launch-wizard-1 0.0.0.0/0 456dlkjfa [] 1.2.3.4 [] test 1.2.3.4/32 4.3.2.0/23 4.3.2.0/23 default 4.3.2.0/23 4.3.2.0/23 launch-wizard-2 0.0.0.0/0 launch-wizard-3 0.0.0.0/0 2.3.4.5/32 [] 我想获取上面的第一列,但要注意的是,我需要将\ (反斜杠)作为该列的一部分,因此awk '{print $1}'应该给我 5678 testing,\ group [testing ip\ 5.6.7.8 launch-wizard-1 456dlkjfa 1.2.3.4 test default launch-wizard-2 launch-wizard-3 2.3.4.5/32

2
如何通过具有公共头合并两个文件的行?
我想基于两个文件中的公共数据合并它们作为标题。 以下是示例 文件1 >Feature scaffold1 1 100 g 101 200 g 201 300 g >Feature scaffold2 1 100 g 01 500 g >Feature scaffold3 10 500 g >Feature scaffold4 10 300 g 文件2 >Feature scaffold1 500 500 r 900 1000 r >Feature scaffold2 200 300 r >Feature scaffold3 100 200 …


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.