繁体   English   中英

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

[英]Adding text before each line in file in linux

文本文件具有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,它仅更新第一行。 请帮忙

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

只需使用诸如awk之类的文本处理工具即可在没有shell循环的情况下执行此操作:

awk -F/ '{ print "a" FS $NF }' file

将字段分隔符设置为/ ,然后打印前导文本(在本示例中为“ a”),然后打印字段分隔符,然后是最后一个字段。

$ 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 ,后跟一个斜杠,然后是当前行的第三个字段。

awk -F'/' '{print "a/"$3}' Sample.txt

(要么)

awk -F'/' '{print "a/"$NF}' Sample.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM