我的文件包含这样的行
any1 aaa bbb ccc
定界符是空间。行中的单词数是未知的
我想将第一个单词放入var1
中。很简单,
awk '{print $1}'
现在,我想将其余部分放入尴尬的var2
中。
如何用awk
打印其余的行?
最好在这里使用read
:
s="any1 aaa bbb ccc"
read var1 var2 <<< "$s"
echo "$var1"
any1
echo "$var2"
aaa bbb ccc
awk
仅解决方案使用:
echo "$s" | awk '{print $1; print substr($0, index($0, " ")+1)}'
any1
aaa bbb ccc
awk解决方案:
awk '{$1 = ""; print $0;}'`
$ var=$(awk '{sub(/^[^[:space:]]+[[:space:]]+/,"")}1' file)
$ echo "$var"
aaa bbb ccc
或通常跳过一些字段使用RE间隔:
$ awk '{sub(/^[[:space:]]*([^[:space:]]+[[:space:]]+){1}/,"")}1' file
aaa bbb ccc
$ awk '{sub(/^[[:space:]]*([^[:space:]]+[[:space:]]+){2}/,"")}1' file
bbb ccc
$ awk '{sub(/^[[:space:]]*([^[:space:]]+[[:space:]]+){3}/,"")}1' file
ccc
请注意,如果您的FS超过一个char,这样做会变得更加复杂,并且以上仅适用于默认的FS,因为如果存在,它还会跳过任何领先的空白(如果您有一个,请删除第一个[[:space:]]*
非默认,但仍然是单char fs)。