我遇到了问题,无法找到解决以下问题的解决方案。
我想将一行的第一个单词复制到以下 n 行的开头(如果它们以特殊字符开头),否则复制新单词。
输入:
aaa random words
`dsf
|df
bbb
|d
输出:
aaa random words
aaa`dsf
aaa|df
bbb
bbb|d
答案1
awk oneliner:
awk '/^[[:alnum:]]/ {prefix = $1; print; next} {print prefix $0}' input
- 在以字母数字字符开头的行上,将第一个单词存储在 中
prefix
,打印该行并继续到下一行。 - 在所有其他行上,
prefix
在该行之前打印。
答案2
awk -f 1stword.awk < input
其中1stword.awk
包含以下脚本:
$0 ~ /^[[:alnum:]]/ { word=$1 ; print } # save 1st word
$0 ~ /^[^[:alnum:]]/ { print word$0 } # prepend saved word
[:alnum:]
字符范围中的 表示所有字母数字字符。根据您对“特殊字符”的定义调整到不同的字符范围。