有shell脚本概念的问题

时间:2017-07-22 20:27:27

标签: bash shell command-line

  

嗨,我有一个包含以下内容的文件

> 1234 alphabet /vag/one/arun  
> 1454 bigdata /home/two/ogra  
> 5684 apple /vinay/three/dire
  

但我希望输出像

> 1234 alphabet one  
> 1454 bigdata two  
> 5684 apple three

3 个答案:

答案 0 :(得分:0)

awk '{
  split($NF,ar,"/");
  $NF=ar[3]
  for (i=1;i<=NF;i++) {
    printf "%s ",$i
  }
  printf "\n"
}' filename

取空格分隔的最后一个字段,并将其拆分为基于&#34; /&#34;的数组ar,最后一个字段等于ar中的第三个元素,然后遍历打印它们的字段。

答案 1 :(得分:0)

将每条输入线切成碎片,将不需要的部件扔进废纸篓,然后重新组装剩下的部分。例如:

grep -Eo '(^|/[^/]+/|/[^/]+$|[^/]+)' <INPUTFILE| grep -Fv /|xargs -L 2 -d '\n' echo >OUTPUTFILE

答案 2 :(得分:0)

您可以通过控制IFS内部字段分隔符)来实现,当它包含'/'字符时会导致字段拆分允许您将a/b/c读入单独的变量。那么只需要打印您想要的变量,例如将您的原始内容放在file

$ while IFS="${IFS}/" read -r n l a b c; do echo "$n $l $b"; done < file
1234 alphabet one
1454 bigdata two
5684 apple three