文本文件包含sample.txt
a/b/1
b/f/2
y/z/3
a/y/4
t/q/5
想要输出
a/1
a/2
a/3
a/4
a/5
尝试了代码
dir="a/"
num=$(wc -l < sample.txt)
for ((i=1; i<=$num; i++));
do
echo "$dir""`awk -F "/" '{print $NF}' sample.txt`"
echo "$i"
break
done
但是这给了我输出
a/1
2
3
4
5
问题是使用awk它只更新第一行。请帮忙
答案 0 :(得分:1)
将IFS
设置为包含'/'
的简单while循环也可以正常工作,例如。
while IFS="$IFS/" read -r a b c; do
[ -z "$pfx" ] && pfx=$a ## if prefix not set, set it with 1st read
echo "$pfx/$c"
done <tripfile.txt
示例输入
$ cat tripfile.txt
a/b/1
b/f/2
y/z/3
a/y/4
t/q/5
示例使用/输出
$ while IFS="$IFS/" read -r a b c; do [ -z "$pfx" ] && pfx=$a; \
echo "$pfx/$c"; done <tripfile.txt)
a/1
a/2
a/3
a/4
a/5
答案 1 :(得分:1)
只需使用文本处理工具(如awk)即可在没有shell循环的情况下执行此操作:
awk -F/ '{ print "a" FS $NF }' file
将字段分隔符设置为/
,然后打印前导文本(本例中为“a”),后跟字段分隔符,后跟最后一个字段。
答案 2 :(得分:1)
$ awk -F/ 'NR==1{x=$1} {print x"/"$3}' sample.txt
a/1
a/2
a/3
a/4
a/5
-F/
这会将字段分隔符设置为/
。
NR==1{x=$1}
这会在变量x
中保存第一行的第一个字段。
print x"/"$3
这将打印变量x
,后跟斜杠,然后是当前行的第三个字段。
答案 3 :(得分:0)
awk -F'/' '{print "a/"$3}' Sample.txt
(或)
awk -F'/' '{print "a/"$NF}' Sample.txt