首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:在给定位置生成带有字符的行

Bash:在给定位置生成带有字符的行
EN

Stack Overflow用户
提问于 2013-05-30 09:26:09
回答 3查看 72关注 0票数 0

给定一个数字列表,如果行号在数字列表中,则生成带有单个X的行,否则生成一个下划线。

输入:

代码语言:javascript
复制
2
3
5

输出

代码语言:javascript
复制
_
X
X
_
X

输入总是排序的。我需要它是一个短的鞭子剪,最好是一个不错的衬里。

背景

我对VIM做了一个小的扩展来标记一些线。VIM输入是来自grep -n <pattern> <input> | cut -f1 -d: (或具有类似输出的其他命令)的输出。我需要生成行,以便稍后在VIM中显示它们。

EN

回答 3

Stack Overflow用户

发布于 2013-05-30 10:01:35

使用sed生成sed脚本,以便sed在seq的输出上使用:

代码语言:javascript
复制
#! /bin/bash
input=PATH/TO/INPUT/FILE
seq 1 $(tail -n1 $input) | sed -n -f <(sed -e 's/$/{cX\nb}/;$ac_' $input)
票数 3
EN

Stack Overflow用户

发布于 2013-05-30 11:00:29

awk:

代码语言:javascript
复制
printf "%d\n" 2 3 5 | 
awk '{x[$1]} END {for(i=1; i<=$1; i++) print (i in x) ? "X" : "_"}'

在结束块中,我使用最后一行读取的$1。如您所示,这将是最大数目。

票数 2
EN

Stack Overflow用户

发布于 2013-05-30 09:51:49

非常丑陋和低效的解决方案,但我现在能想到的最短的解决方案;)

假设您在一个名为test.txt的文件中有数字

代码语言:javascript
复制
for i in $(seq $(tail -n 1 test.txt)); do grep -q "^$i$" test.txt && echo X || echo _; done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16832423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档