繁体   English   中英

打印所有列,但首先按pattern,bash分隔

[英]Print all columns but first delimited by pattern, bash

祝大家好日子

我想知道如何打印所有列,但首先,每列被分隔;

例:

abc; def; ghi; jkl

获得:

def; ghi; jkl

到目前为止我已经完成了

awk 'BEGIN { FS = ";" } ; {for(i=2;i<NF;i++)printf "%s",$i OFS; if (NF) printf "%s",$NF; printf ORS}'

非常感谢任何线索。

只需使用cut

cut -f2- -d\; filename.txt

如果您的输入来自stdin:

echo "abc; def; ghi; jkl" | cut -f2- -d\;

如果你知道它总是以空格分隔:

echo "abc; def; ghi; jkl" | while read ignore line ; do echo $line ; done

while read部分可以采用多个参数:在这种情况下, ignore将采用第一个段,直到第一个分隔符(意思是“ abc; ”),并且未读取的任何内容将被放入其余参数中。 在这种情况下,它是line ,因此line包含您打印出来的“ def; ghi; jkl ”。

echo "abc; def; ghi; jkl" | while read first second third ; do echo $first; echo $second; echo $third; done

将输出

abc;
def;
ghi; jkl

编辑:

如果您知道它将由其他标记分隔,则可以更改IFS值:

IFS=";" ; echo "abc; def; ghi; jkl" | while read first second third ; do echo $first; echo $second; echo $third; done

生产:

abc
 def
 ghi  jkl

(注意defghi之前的空格)。

一个bash函数:

$ myshift() {
   local IFS=';'
   set -- $1
   shift
   echo "$*"
}

$ myshift "abc; def; ghi; jkl"
 def; ghi; jkl

只是为了与awk一起玩:

$ echo "abc; def; ghi; jkl"|awk -F "; " '{$1=""; gsub("^ +", "", $0); print}'
def; ghi; jkl

使用sed

$ echo "abc; def; ghi; jkl"|sed "s/^[^;]\{1,\};\ \{1,\}//g"
def; ghi; jkl

正如您所看到的那样, cut版本会在行的开头打印一个空格;)

$ echo "abc; def; ghi; jkl"|cut -d";" -f2-
 def; ghi; jkl

所以你也可以尝试这样的事情:

$ echo "abc; def; ghi; jkl"|cut -d";" -f2-|xargs
def; ghi; jkl

暂无
暂无

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

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