脚本中的同一个命令和脚本之外的结果不一样

当我将这个命令从我的脚本中传出时:

transmission-remote -n 'transmission:transmission' -l | awk '{ s = ""; for (i = 10; i <= NF; i++) s = s $i " "; print s }' | grep "\b\b" | tail -1 

结果是:

 Micro Pratique N°247 Avril 2017.pdf 

但是,当我在脚本中传递这个命令并将结果存储在如下variables中:

 test=`transmission-remote -n 'transmission:transmission' -l | awk '{ s = ""; for (i = 10; i <= NF; i++) s = s $i " "; print s }' | grep "\b\b" | tail -1` 

结果是不一样的! 这里带有“set -x”的脚本:

 +++ transmission-remote -n transmission:transmission -l +++ awk '{ s = ""; for (i = 10; i <= NF; i++) s = s $i " "; print s }' +++ grep '\b\b' +++ tail -1 ++ test='Pratique N°247 Avril 2017.pdf ' 

为什么削减我的第一个词“微”?

这里transmission-remote -n transmission:transmission -l的结果是transmission-remote -n transmission:transmission -l

 ID Done Have ETA Up Down Ratio Status Name 1 100% 8.30 GB Done 1.0 0.0 2.8 Seeding Ghost In The Shell 2 Innocence 2003 MULTi VFF BluRay 1080p AC3 x264 65 100% 4.86 GB Done 0.0 0.0 2.9 Idle WWE.RAW.2017.03.20.720p.HDTV.x264-Ebi.mp4 71 100% 2.89 GB Done 0.0 0.0 2.9 Idle WWE.Smackdown.Live.2017.03.21.720p.HDTV.x264-Ebi.mp4 106 100% 4.80 GB Done 0.0 0.0 0.0 Seeding WWE.RAW.2017.03.27.720p.HDTV.x264-Ebi.mp4 107 100% 2.90 GB Done 0.0 0.0 0.9 Idle WWE.SmackDown.Live.2017.03.28.720p.HDTV.x264-NWCHD.mp4 113 0% None Unknown 0.0 0.0 None Idle Micro Pratique N°247 Avril 2017.pdf Sum: 23.75 GB 1.0 0.0 

你的文件是固定宽度的格式,没有正确分隔。 你可以利用gawkFIELDWIDTHS变量。 由于其他awk不支持它,这里是另一种方法,假设你知道你想要提取的字段的标题

 awk 'NR==1 {p=match($0,"Name")} length($0)>p {print substr($0,p)}' file Name Ghost In The Shell 2 Innocence 2003 MULTi VFF BluRay 1080p AC3 x264 WWE.RAW.2017.03.20.720p.HDTV.x264-Ebi.mp4 WWE.Smackdown.Live.2017.03.21.720p.HDTV.x264-Ebi.mp4 WWE.RAW.2017.03.27.720p.HDTV.x264-Ebi.mp4 WWE.SmackDown.Live.2017.03.28.720p.HDTV.x264-NWCHD.mp4 Micro Pratique N°247 Avril 2017.pdf 

得到最后的入场记录tail

 awk 'NR==1 {p=match($0,"Name")} length($0)>p {last=substr($0,p)} END {print last}' file Micro Pratique N°247 Avril 2017.pdf