我有以下输入文件:
a 1 o p
b 2 o p p
c 3 o p p p
在最后一行中,最后一行之间有一个双倍空格p's
,
和列有不同的间距
我已经使用了以下解决方案:使用 awk 打印从第 n 到最后的所有列 https://stackoverflow.com/questions/2961635/using-awk-to-print-all-columns-from-the-nth-to-the-last.
awk '{for(i=2;i<=NF;i++){printf "%s ", $i}; printf "\n"}'
它工作正常,直到最后一列达到双倍空格并删除一个空格。
在仍然使用 awk 的同时如何避免这种情况?
既然你想保留空格,我们就使用cut
:
$ cut -d' ' -f2- file
1 o p
2 o p p
3 o p p p
或者例如从第 4 列开始:
$ cut -d' ' -f4- file
p
p p
p p p
只要您要删除的列以一个空格分隔,此操作就有效。
如果您要删除的列也包含不同数量的空格,您可以使用 Ed Morton 的精美解决方案打印除前三列之外的所有列 https://stackoverflow.com/a/18819899/1983854:
awk '{sub(/[[:space:]]*([^[:space:]]+[[:space:]]+){1}/,"")}1'
^
number of cols to remove
Test
$ cat a
a 1 o p
b 2 o p p
c 3 o p p p
$ awk '{sub(/[[:space:]]*([^[:space:]]+[[:space:]]+){2}/,"")}1' a
o p
o p p
o p p p
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)