说我有一个文件
3 boy
2 hello
3 bus
我希望从每一行中选择i
个字母,其中i是该行前面的数字(生成y
,e
,s
)。使用sed
/ cut
有一种简单的方法吗?我尝试匹配例如子串与第一个带有
cat test.txt | sed -e 's/\([0-9]\) \(.*\)\{\1\}.*/\2/'
然后将其剪切,但这会产生错误Invalid content of \{\}
。这样做的正确方法是什么(最好只使用sed / cut / ...所以没有for-loops等)?
我正在寻找一种可以作为流水线操作的方法,即以cat test.txt | ...
开头。
答案 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