给定一个数字列表,如果行号在数字列表中,则生成具有单个X的行,否则生成单个下划线。
输入:
2
3
5
输出
_
X
X
_
X
输入的排序始终排序。我需要它是一个短暂的Bash剪切,最好是一个漂亮的一个衬垫
背景
我对VIM做了一个小扩展以标记一些行。 VIM输入是grep -n <pattern> <input> | cut -f1 -d:
(或具有类似输出的其他命令)的输出。我需要生成这些行以便稍后在VIM中显示它们。
答案 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