大家好日子,
我想知道如何打印所有列,但首先是每列都由;
分隔。
示例:
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}'
非常感谢你提出任何线索。
答案 0 :(得分:5)
只需使用cut
:
cut -f2- -d\; filename.txt
如果您的输入来自stdin:
echo "abc; def; ghi; jkl" | cut -f2- -d\;
答案 1 :(得分:2)
如果您知道它将始终以空格分隔:
echo "abc; def; ghi; jkl" | while read ignore line ; do echo $line ; done
while read
部分可以带有多个参数:ignore
在这种情况下将采用第一个分段,直到第一个分隔符(意思是&#34; abc;
&#34;) ,任何未被读取的内容都被放入其余的论点中。在这种情况下,它是line
,因此line
将包含&#34; def; ghi; jkl
&#34;你打印出来的。
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
(注意def
和ghi
之前的空格。
答案 2 :(得分:2)
bash函数:
$ myshift() {
local IFS=';'
set -- $1
shift
echo "$*"
}
$ myshift "abc; def; ghi; jkl"
def; ghi; jkl
答案 3 :(得分:1)
只为了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