!!!注意力寻求解决方案而不使用变量 !!!
答案 0 :(得分:2)
awk -F '_' '{print $1> "/tmp/txt_left"; print $2 > "/tmp/txt_right" }' /tmp/txt
答案 1 :(得分:1)
您可以尝试剪切线条,在下划线上切开
Cat /tmp/txt | cut -d_ -f 1 > txt_left
答案 2 :(得分:1)
更短更快:
sed -ne $'h;s/_.*$//;w /tmp/txt_left\n;g;s/^.*_//;w /tmp/txt_right' /tmp/txt
解释:可写:
sed -ne '
h; # hold (copy current line in hold space)
s/_.*$//; # replace from _ to end of line by nothing
w /tmp/txt_left
# Write current line to file
# (filename have to be terminated by a newline)
g; # get (copy hold space to current line buffer)
s/^.*_//; # replace from begin of line to _ by nothing
w /tmp/txt_right
# write
' /tmp/txt
这不是一个真正的变量,我使用第一个参数元素来完成工作并在完成后恢复参数列表:
set -- "$(</tmp/txt)" "$@"
echo >>/tmp/txt_right ${1#*_}
echo >>/tmp/txt_left ${1%_*}
shift
我取消字符串在参数行的第一个位置,
对$1
进行操作,而不是shift
参数行,所以没有使用变量,并且很好,参数行以原始状态返回
...这是一个纯bash
解决方案; - )
答案 3 :(得分:0)
使用bash进程替换,tee和cut:
tee -a >(cut -d _ -f 0 > /tmp/txt_left) >(cut -d _ -f 1 >/tmp/txt_right) < /tmp/txt