在linux中的文件中的每一行之前添加文本

时间:2017-08-21 06:50:55

标签: linux loops for-loop awk

文本文件包含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它只更新第一行。请帮忙

4 个答案:

答案 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