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

时间:2013-05-30 09:26:09

标签: bash

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

输入:

2
3
5

输出

_
X
X
_
X

输入的排序始终排序。我需要它是一个短暂的Bash剪切,最好是一个漂亮的一个衬垫

背景

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

3 个答案:

答案 0 :(得分:3)

使用sed在seq:

的输出上生成sed使用的sed脚本
#! /bin/bash
input=PATH/TO/INPUT/FILE
seq 1 $(tail -n1 $input) | sed -n -f <(sed -e 's/$/{cX\nb}/;$ac_' $input)

答案 1 :(得分:2)

AWK:

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

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

答案 2 :(得分:1)

非常难看且效率低下的解决方案,但我现在能想到的最短;但

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

for i in $(seq $(tail -n 1 test.txt)); do grep -q "^$i$" test.txt && echo X || echo _; done