0

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

输入:

2
3
5

输出

_
X
X
_
X

输入总是排序的。我需要它是一个短的 Bash 剪断,最好是一个漂亮的单衬里

背景

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

4

3 回答 3

3

使用 sed 生成一个 sed 脚本,供 sed 在 seq 的输出上使用:

#! /bin/bash
input=PATH/TO/INPUT/FILE
seq 1 $(tail -n1 $input) | sed -n -f <(sed -e 's/$/{cX\nb}/;$ac_' $input)
于 2013-05-30T10:01:35.793 回答
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从最后一行读取的内容。正如您所指出的,这将是最大数量。

于 2013-05-30T11:00:29.277 回答
1

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

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

for i in $(seq $(tail -n 1 test.txt)); do grep -q "^$i$" test.txt && echo X || echo _; done
于 2013-05-30T09:51:49.003 回答