如何为文件中的每一行从字符串中选择第 n 个字符?

itV*_*ico 5 linux bash sed

每行都有一个单词和一个数字。我需要以某种方式选择第 n 个字母,它们一起组成一个新单词。例如:

and 3
for 3
map 2
wrestle 1

draw
Run Code Online (Sandbox Code Playgroud)

它必须这样开始

cat char.txt | ...
Run Code Online (Sandbox Code Playgroud)

而且我只允许使用 sed(不允许使用 awk、perl,...)。

我知道如何选择所有数字

sed 's/\(.*\) \(.*\)/\2/g'
Run Code Online (Sandbox Code Playgroud)

或文字

sed 's/\(.*\) \(.*\)/\1/g'
Run Code Online (Sandbox Code Playgroud)

我在想

cat char.txt | head -c $(sed 's/\(.*\) \(.*\)/\2/g') | tail -c 1 | sed 's/\n\//g'
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为它不会迭代所有行,并且由于某种原因它甚至无法在单行上工作。

请需要一些帮助和指导

Cyr*_*rus 5

while read w n; do echo -n ${w:(($n-1)):1}; done < filename
Run Code Online (Sandbox Code Playgroud)

输出:

draw
Run Code Online (Sandbox Code Playgroud)
${parameter:offset:length}: 
   Substring Expansion. Expands to up to length characters of parameter
   starting at the character specified by offset.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,该扩展的偏移量和长度字段已被视为算术表达式,因此您可以使用“${word:n-1:1}” (2认同)