我需要帮助: 我有一个像这样的输出文件:
001 value
value
045 value
value
value
068 value
098 value
value
我需要一个命令来获得这样的输出:
001 value
001 value
045 value
045 value
045 value
068 value
098 value
098 value
答案 0 :(得分:1)
awk
:
awk '/^[0-9]/{prefix=$1;$1=""}{sub(/^ +/,"");print prefix,$0}' test.in
这适用于以数字开头的任何前缀。
原始bash字符串操作。比sed
更容易理解,但也可以硬编码3个字符,不一定是数字前缀。
while IFS= read -r line; do
if [[ "${line:0:3}" != " " ]]; then
prefix="${line:0:3}"
fi
printf '%s%s\n' "$prefix" "${line:3}"
done < test.in
这也可以使用sed
来完成,尽管它比通常的sed
命令更复杂一些。它假设有3位数的前缀
-E
适用于BSD sed
;如果您使用的是GNU -r
,则应将其替换为sed
。
sed -E '/^[0-9]{3} /{h
s/(...).*/\1/
x
n
}
G
s/...(.*)\n(.*)/\2\1/
' file.txt