簡體   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