从文件中选择可变字母索引

时间:2014-10-29 17:23:50

标签: bash sed

说我有一个文件

3 boy
2 hello
3 bus

我希望从每一行中选择i个字母,其中i是该行前面的数字(生成yes )。使用sed / cut有一种简单的方法吗?我尝试匹配例如子串与第一个带有

的许多字母
cat test.txt | sed -e 's/\([0-9]\) \(.*\)\{\1\}.*/\2/'

然后将其剪切,但这会产生错误Invalid content of \{\}。这样做的正确方法是什么(最好只使用sed / cut / ...所以没有for-loops等)?

我正在寻找一种可以作为流水线操作的方法,即以cat test.txt | ...开头。

2 个答案:

答案 0 :(得分:2)

您可以使用循环:

while read -r number name
do
   echo "${name:$number - 1:1}"
done < file

这会从${string:position:length}语法中获取$length语法:$string $position字符串子串。当第一个字符位于0位置时,我们必须减去1来获得所需的字符。

对于您的给定输入,它返回:

$ while read -r number name; do echo "${name:$number - 1:1}"; done < a
y
e
s

答案 1 :(得分:2)

单个awk脚本可以写成

awk '{print substr($2,$1,1)}' inputFile

将输出显示为

y
e
s

substr(str, pos, len)函数返回从postion pos开始的子字符串,其长度为len