给定一个数字列表,如果行号在数字列表中,则生成带有单个 X 的行,否则生成带有单个下划线的行。
输入:
2
3
5
输出
_
X
X
_
X
输入总是排序的。我需要它是一个短的 Bash 剪断,最好是一个漂亮的单衬里
背景
我对 VIM 做了一个小扩展来标记一些行。VIM 输入是来自grep -n <pattern> <input> | cut -f1 -d:
(或具有类似输出的其他命令)的输出。我需要生成这些行以便稍后在 VIM 中呈现它们。
给定一个数字列表,如果行号在数字列表中,则生成带有单个 X 的行,否则生成带有单个下划线的行。
输入:
2
3
5
输出
_
X
X
_
X
输入总是排序的。我需要它是一个短的 Bash 剪断,最好是一个漂亮的单衬里
背景
我对 VIM 做了一个小扩展来标记一些行。VIM 输入是来自grep -n <pattern> <input> | cut -f1 -d:
(或具有类似输出的其他命令)的输出。我需要生成这些行以便稍后在 VIM 中呈现它们。
使用 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)
awk:
printf "%d\n" 2 3 5 |
awk '{x[$1]} END {for(i=1; i<=$1; i++) print (i in x) ? "X" : "_"}'
在 END 块中,我使用$1
从最后一行读取的内容。正如您所指出的,这将是最大数量。
非常丑陋和低效的解决方案,但我现在能想到的最短的解决方案;)
假设您有一个名为的文件中的数字test.txt
:
for i in $(seq $(tail -n 1 test.txt)); do grep -q "^$i$" test.txt && echo X || echo _; done